From 915b5ae5e834526ec5d70f33ef65eb71d72a189b Mon Sep 17 00:00:00 2001 From: mns-nordicals Date: Fri, 9 Jan 2026 21:22:43 +0100 Subject: [PATCH 01/13] Implement necessary functions for a good readme example --- R/manifest.R | 8 + R/r2f-matrix-blas.R | 429 ++++++++++++++++++- R/r2f-matrix-infer.R | 58 +++ R/r2f-matrix.R | 192 +++++++++ R/r2f.R | 100 ++++- doc/matrix/solve-chol-diag-implementation.md | 79 ++++ tests/testthat/test-matrix-lapack.R | 120 ++++++ 7 files changed, 984 insertions(+), 2 deletions(-) create mode 100644 doc/matrix/solve-chol-diag-implementation.md create mode 100644 tests/testthat/test-matrix-lapack.R diff --git a/R/manifest.R b/R/manifest.R index 0617abfa..24d7de65 100644 --- a/R/manifest.R +++ b/R/manifest.R @@ -325,6 +325,14 @@ dims2f_eval_base_env[["length"]] <- function(x) { glue("size({x})") } } +dims2f_eval_base_env[["min"]] <- function(...) { + args <- list(...) + glue("min({str_flatten_commas(args)})") +} +dims2f_eval_base_env[["max"]] <- function(...) { + args <- list(...) + glue("max({str_flatten_commas(args)})") +} dims2f <- function(dims, scope) { diff --git a/R/r2f-matrix-blas.R b/R/r2f-matrix-blas.R index b4dd732d..c9bd93dc 100644 --- a/R/r2f-matrix-blas.R +++ b/R/r2f-matrix-blas.R @@ -191,7 +191,14 @@ ensure_blas_operand_name <- function(x, hoist) { # Wrap an expression as a BLAS int literal. blas_int <- function(x) { - glue("int({x}, kind=c_int)") + x_str <- if (is.language(x)) { + gsub("([0-9]+)L\\b", "\\1", deparse1(x)) + } else if (is_wholenumber(x)) { + as.character(as.integer(x)) + } else { + as.character(x) + } + glue("int({x_str}, kind=c_int)") } # Centralized GEMM emission with optional destination @@ -306,6 +313,35 @@ end do" )) } +diag_length_expr <- function(nrow, ncol, context) { + if (is_scalar_na(nrow) || is_scalar_na(ncol)) { + stop(context, " requires known dimensions", call. = FALSE) + } + if (is_wholenumber(nrow) && is_wholenumber(ncol)) { + return(as.integer(min(nrow, ncol))) + } + if (identical(nrow, ncol)) { + return(nrow) + } + call("min", nrow, ncol) +} + +zero_lower_triangle <- function(target, n, hoist) { + stopifnot(is_string(target), inherits(hoist, "environment")) + + idx_i <- hoist$declare_tmp(mode = "integer", dims = NULL) + idx_j <- hoist$declare_tmp(mode = "integer", dims = NULL) + n_int <- blas_int(n) + hoist$emit(glue( + " +do {idx_i@name} = 2_c_int, {n_int} + do {idx_j@name} = 1_c_int, {idx_i@name} - 1_c_int + {target}({idx_i@name}, {idx_j@name}) = 0.0_c_double + end do +end do" + )) +} + # Centralized SYRK emission for symmetric rank-k update # Computes: C := alpha * op(A) * op(A)^T + beta * C # For crossprod(X): C = t(X) %*% X → trans = "T" @@ -522,3 +558,394 @@ triangular_solve <- function( } out } + +lapack_solve <- function( + A, + B, + scope, + hoist, + dest = NULL, + context = "solve" +) { + if (!inherits(hoist, "environment")) { + stop("internal: hoist must be a hoist environment") + } + + A <- maybe_cast_double(A) + B <- maybe_cast_double(B) + + if (A@value@rank != 2L) { + stop(context, " expects a matrix for `a`", call. = FALSE) + } + + a_dims <- matrix_dims(A) + conform <- check_conformable(a_dims$rows, a_dims$cols) + if (!conform$ok) { + stop(context, " requires a square matrix", call. = FALSE) + } + if (conform$unknown) { + warn_conformability_unknown(a_dims$rows, a_dims$cols, context) + } + n <- a_dims$rows + + b_rank <- B@value@rank + if (b_rank > 2L) { + stop( + context, + " only supports vector or matrix right-hand sides", + call. = FALSE + ) + } + if (b_rank == 0L) { + stop(context, " expects a vector or matrix right-hand side", call. = FALSE) + } + + if (b_rank == 1L) { + b_len <- dim_or_one(B, 1L) + conform <- check_conformable(n, b_len) + if (!conform$ok) { + stop("non-conformable arguments in ", context, call. = FALSE) + } + if (conform$unknown) { + warn_conformability_unknown(n, b_len, context) + } + } else { + b_rows <- dim_or_one(B, 1L) + conform <- check_conformable(n, b_rows) + if (!conform$ok) { + stop("non-conformable arguments in ", context, call. = FALSE) + } + if (conform$unknown) { + warn_conformability_unknown(n, b_rows, context) + } + } + + A_name <- ensure_blas_operand_name(A, hoist) + B_input_name <- ensure_blas_operand_name(B, hoist) + + A_work <- hoist$declare_tmp(mode = "double", dims = list(n, n)) + hoist$emit(glue("{A_work@name} = {A_name}")) + + writes_to_dest <- FALSE + if ( + can_use_output( + dest, + input_names = c(A_name, B_input_name), + expected_dims = B@value@dims, + context = context, + allow_alias = B_input_name + ) + ) { + out_var <- dest + out_name <- dest@name + writes_to_dest <- TRUE + } else { + out_var <- hoist$declare_tmp(mode = "double", dims = B@value@dims) + out_name <- out_var@name + } + hoist$emit(glue("{out_name} = {B_input_name}")) + + ipiv <- hoist$declare_tmp(mode = "integer", dims = list(n)) + info <- hoist$declare_tmp(mode = "integer", dims = NULL) + nrhs <- if (b_rank == 1L) 1L else dim_or_one(B, 2L) + + hoist$emit(glue( + "call dgesv({blas_int(n)}, {blas_int(nrhs)}, {A_work@name}, {blas_int(n)}, {ipiv@name}, {out_name}, {blas_int(n)}, {info@name})" + )) + + out <- Fortran(out_name, out_var) + if (writes_to_dest) { + attr(out, "writes_to_dest") <- TRUE + } + out +} + +lapack_inverse <- function(A, scope, hoist, dest = NULL, context = "solve") { + if (!inherits(hoist, "environment")) { + stop("internal: hoist must be a hoist environment") + } + + A <- maybe_cast_double(A) + if (A@value@rank != 2L) { + stop(context, " expects a matrix for `a`", call. = FALSE) + } + + a_dims <- matrix_dims(A) + conform <- check_conformable(a_dims$rows, a_dims$cols) + if (!conform$ok) { + stop(context, " requires a square matrix", call. = FALSE) + } + if (conform$unknown) { + warn_conformability_unknown(a_dims$rows, a_dims$cols, context) + } + n <- a_dims$rows + + A_name <- ensure_blas_operand_name(A, hoist) + + writes_to_dest <- FALSE + if ( + can_use_output( + dest, + input_names = A_name, + expected_dims = list(n, n), + context = context, + allow_alias = A_name + ) + ) { + out_var <- dest + out_name <- dest@name + writes_to_dest <- TRUE + } else { + out_var <- hoist$declare_tmp(mode = "double", dims = list(n, n)) + out_name <- out_var@name + } + + hoist$emit(glue("{out_name} = {A_name}")) + + ipiv <- hoist$declare_tmp(mode = "integer", dims = list(n)) + info <- hoist$declare_tmp(mode = "integer", dims = NULL) + work <- hoist$declare_tmp(mode = "double", dims = list(n)) + + hoist$emit(glue( + "call dgetrf({blas_int(n)}, {blas_int(n)}, {out_name}, {blas_int(n)}, {ipiv@name}, {info@name})" + )) + hoist$emit(glue( + "call dgetri({blas_int(n)}, {out_name}, {blas_int(n)}, {ipiv@name}, {work@name}, {blas_int(n)}, {info@name})" + )) + + out <- Fortran(out_name, out_var) + if (writes_to_dest) { + attr(out, "writes_to_dest") <- TRUE + } + out +} + +lapack_chol <- function(A, scope, hoist, dest = NULL, context = "chol") { + if (!inherits(hoist, "environment")) { + stop("internal: hoist must be a hoist environment") + } + + A <- maybe_cast_double(A) + if (A@value@rank != 2L) { + stop(context, " expects a matrix", call. = FALSE) + } + + a_dims <- matrix_dims(A) + conform <- check_conformable(a_dims$rows, a_dims$cols) + if (!conform$ok) { + stop(context, " requires a square matrix", call. = FALSE) + } + if (conform$unknown) { + warn_conformability_unknown(a_dims$rows, a_dims$cols, context) + } + n <- a_dims$rows + + A_name <- ensure_blas_operand_name(A, hoist) + + writes_to_dest <- FALSE + if ( + can_use_output( + dest, + input_names = A_name, + expected_dims = list(n, n), + context = context, + allow_alias = A_name + ) + ) { + out_var <- dest + out_name <- dest@name + writes_to_dest <- TRUE + } else { + out_var <- hoist$declare_tmp(mode = "double", dims = list(n, n)) + out_name <- out_var@name + } + + hoist$emit(glue("{out_name} = {A_name}")) + + info <- hoist$declare_tmp(mode = "integer", dims = NULL) + hoist$emit(glue( + "call dpotrf('U', {blas_int(n)}, {out_name}, {blas_int(n)}, {info@name})" + )) + zero_lower_triangle(out_name, n, hoist = hoist) + + out <- Fortran(out_name, out_var) + if (writes_to_dest) { + attr(out, "writes_to_dest") <- TRUE + } + out +} + +lapack_chol2inv <- function( + R, + scope, + hoist, + dest = NULL, + context = "chol2inv" +) { + if (!inherits(hoist, "environment")) { + stop("internal: hoist must be a hoist environment") + } + + R <- maybe_cast_double(R) + if (R@value@rank != 2L) { + stop(context, " expects a matrix", call. = FALSE) + } + + r_dims <- matrix_dims(R) + conform <- check_conformable(r_dims$rows, r_dims$cols) + if (!conform$ok) { + stop(context, " requires a square matrix", call. = FALSE) + } + if (conform$unknown) { + warn_conformability_unknown(r_dims$rows, r_dims$cols, context) + } + n <- r_dims$rows + + R_name <- ensure_blas_operand_name(R, hoist) + + writes_to_dest <- FALSE + if ( + can_use_output( + dest, + input_names = R_name, + expected_dims = list(n, n), + context = context, + allow_alias = R_name + ) + ) { + out_var <- dest + out_name <- dest@name + writes_to_dest <- TRUE + } else { + out_var <- hoist$declare_tmp(mode = "double", dims = list(n, n)) + out_name <- out_var@name + } + + hoist$emit(glue("{out_name} = {R_name}")) + + info <- hoist$declare_tmp(mode = "integer", dims = NULL) + hoist$emit(glue( + "call dpotri('U', {blas_int(n)}, {out_name}, {blas_int(n)}, {info@name})" + )) + symmetrize_upper_to_lower(out_name, n, hoist = hoist) + + out <- Fortran(out_name, out_var) + if (writes_to_dest) { + attr(out, "writes_to_dest") <- TRUE + } + out +} + +diag_extract <- function(x, scope, hoist, dest = NULL, context = "diag") { + if (!inherits(hoist, "environment")) { + stop("internal: hoist must be a hoist environment") + } + + x <- maybe_cast_double(x) + if (x@value@rank != 2L) { + stop(context, " expects a matrix input", call. = FALSE) + } + + x_dims <- matrix_dims(x) + diag_len <- diag_length_expr(x_dims$rows, x_dims$cols, context) + + x_name <- ensure_blas_operand_name(x, hoist) + + writes_to_dest <- FALSE + if ( + can_use_output( + dest, + input_names = x_name, + expected_dims = list(diag_len), + context = context + ) + ) { + out_var <- dest + out_name <- dest@name + writes_to_dest <- TRUE + } else { + out_var <- hoist$declare_tmp(mode = "double", dims = list(diag_len)) + out_name <- out_var@name + } + + idx_i <- hoist$declare_tmp(mode = "integer", dims = NULL) + hoist$emit(glue( + " +do {idx_i@name} = 1_c_int, {blas_int(diag_len)} + {out_name}({idx_i@name}) = {x_name}({idx_i@name}, {idx_i@name}) +end do" + )) + + out <- Fortran(out_name, out_var) + if (writes_to_dest) { + attr(out, "writes_to_dest") <- TRUE + } + out +} + +diag_matrix <- function( + x, + nrow, + ncol, + scope, + hoist, + dest = NULL, + context = "diag" +) { + if (!inherits(hoist, "environment")) { + stop("internal: hoist must be a hoist environment") + } + + x <- maybe_cast_double(x) + if (x@value@rank > 1L) { + stop(context, " expects a vector or scalar input", call. = FALSE) + } + + diag_len <- diag_length_expr(nrow, ncol, context) + x_scalar <- passes_as_scalar(x@value) + x_len <- if (x_scalar) 1L else dim_or_one(x, 1L) + + x_name <- ensure_blas_operand_name(x, hoist) + + writes_to_dest <- FALSE + if ( + can_use_output( + dest, + input_names = x_name, + expected_dims = list(nrow, ncol), + context = context + ) + ) { + out_var <- dest + out_name <- dest@name + writes_to_dest <- TRUE + } else { + out_var <- hoist$declare_tmp(mode = "double", dims = list(nrow, ncol)) + out_name <- out_var@name + } + + hoist$emit(glue("{out_name} = 0.0_c_double")) + + idx_i <- hoist$declare_tmp(mode = "integer", dims = NULL) + value_expr <- if (x_scalar) { + x_name + } else { + idx_expr <- glue( + "1_c_int + mod({idx_i@name} - 1_c_int, {blas_int(x_len)})" + ) + glue("{x_name}({idx_expr})") + } + + hoist$emit(glue( + " +do {idx_i@name} = 1_c_int, {blas_int(diag_len)} + {out_name}({idx_i@name}, {idx_i@name}) = {value_expr} +end do" + )) + + out <- Fortran(out_name, out_var) + if (writes_to_dest) { + attr(out, "writes_to_dest") <- TRUE + } + out +} diff --git a/R/r2f-matrix-infer.R b/R/r2f-matrix-infer.R index 874c40d9..45646ed0 100644 --- a/R/r2f-matrix-infer.R +++ b/R/r2f-matrix-infer.R @@ -161,3 +161,61 @@ infer_dest_triangular <- function(args, scope) { } Variable("double", B@dims) } + +# Infer destination dimensions for solve(). +infer_dest_solve <- function(args, scope) { + a_arg <- args$a %||% args[[1L]] + if (is.null(a_arg)) { + return(NULL) + } + A <- infer_symbol_var(a_arg, scope) + if (is.null(A) || A@rank != 2L) { + return(NULL) + } + a_dims <- matrix_dims_var(A) + n <- a_dims$rows + + b_arg <- args$b %||% if (length(args) >= 2L) args[[2L]] else NULL + if (is.null(b_arg)) { + return(Variable("double", list(n, n))) + } + B <- infer_symbol_var(b_arg, scope) + if (is.null(B)) { + return(NULL) + } + if (B@rank == 1L) { + return(Variable("double", list(n))) + } + if (B@rank == 2L) { + return(Variable("double", list(n, B@dims[[2L]]))) + } + NULL +} + +# Infer destination dimensions for chol(). +infer_dest_chol <- function(args, scope) { + a_arg <- args[[1L]] + if (is.null(a_arg)) { + return(NULL) + } + A <- infer_symbol_var(a_arg, scope) + if (is.null(A) || A@rank != 2L) { + return(NULL) + } + a_dims <- matrix_dims_var(A) + Variable("double", list(a_dims$rows, a_dims$cols)) +} + +# Infer destination dimensions for chol2inv(). +infer_dest_chol2inv <- function(args, scope) { + r_arg <- args[[1L]] + if (is.null(r_arg)) { + return(NULL) + } + R <- infer_symbol_var(r_arg, scope) + if (is.null(R) || R@rank != 2L) { + return(NULL) + } + r_dims <- matrix_dims_var(R) + Variable("double", list(r_dims$rows, r_dims$cols)) +} diff --git a/R/r2f-matrix.R b/R/r2f-matrix.R index d061e432..23b9955d 100644 --- a/R/r2f-matrix.R +++ b/R/r2f-matrix.R @@ -532,6 +532,198 @@ register_r2f_handler( dest_infer = infer_dest_outer ) +register_r2f_handler( + "solve", + function(args, scope, ..., hoist = NULL, dest = NULL) { + a_arg <- args$a %||% args[[1L]] + if (is.null(a_arg) || is_missing(a_arg)) { + stop("solve() expects `a`", call. = FALSE) + } + if (!is.null(args$tol) && !is_missing(args$tol)) { + stop("solve() does not support tol yet", call. = FALSE) + } + if (!is.null(args$LINPACK) && !is_missing(args$LINPACK)) { + stop("solve() does not support LINPACK yet", call. = FALSE) + } + + b_arg <- args$b %||% if (length(args) >= 2L) args[[2L]] else NULL + if (!is.null(b_arg) && is_missing(b_arg)) { + b_arg <- NULL + } + + A <- r2f(a_arg, scope, ..., hoist = hoist) + if (is.null(b_arg)) { + return(lapack_inverse( + A, + scope = scope, + hoist = hoist, + dest = dest, + context = "solve" + )) + } + + B <- r2f(b_arg, scope, ..., hoist = hoist) + lapack_solve( + A = A, + B = B, + scope = scope, + hoist = hoist, + dest = dest, + context = "solve" + ) + }, + dest_supported = TRUE, + dest_infer = infer_dest_solve +) + +register_r2f_handler( + "chol", + function(args, scope, ..., hoist = NULL, dest = NULL) { + x_arg <- args$x %||% args[[1L]] + if (is.null(x_arg) || is_missing(x_arg)) { + stop("chol() expects `x`", call. = FALSE) + } + pivot <- logical_arg_or_default(args, "pivot", FALSE, "chol()") + if (isTRUE(pivot)) { + stop("chol() does not support pivot = TRUE yet", call. = FALSE) + } + if (!is.null(args$LINPACK) && !is_missing(args$LINPACK)) { + stop("chol() does not support LINPACK yet", call. = FALSE) + } + + x <- r2f(x_arg, scope, ..., hoist = hoist) + lapack_chol( + A = x, + scope = scope, + hoist = hoist, + dest = dest, + context = "chol" + ) + }, + dest_supported = TRUE, + dest_infer = infer_dest_chol +) + +register_r2f_handler( + "chol2inv", + function(args, scope, ..., hoist = NULL, dest = NULL) { + x_arg <- args[[1L]] + if (is.null(x_arg) || is_missing(x_arg)) { + stop("chol2inv() expects `x`", call. = FALSE) + } + if (!is.null(args$size) && !is_missing(args$size)) { + stop("chol2inv() does not support size yet", call. = FALSE) + } + + x <- r2f(x_arg, scope, ..., hoist = hoist) + lapack_chol2inv( + R = x, + scope = scope, + hoist = hoist, + dest = dest, + context = "chol2inv" + ) + }, + dest_supported = TRUE, + dest_infer = infer_dest_chol2inv +) + +register_r2f_handler( + "diag", + function(args, scope, ..., hoist = NULL, dest = NULL) { + x_arg <- args$x %||% args[[1L]] + nrow_arg <- args$nrow + ncol_arg <- args$ncol + if (!is.null(args$names) && !is_missing(args$names)) { + logical_arg_or_default(args, "names", TRUE, "diag()") + } + + has_nrow <- !is.null(nrow_arg) && !is_missing(nrow_arg) + has_ncol <- !is.null(ncol_arg) && !is_missing(ncol_arg) + + if (is.null(x_arg) || is_missing(x_arg)) { + if (!has_nrow && !has_ncol) { + stop("argument \"nrow\" is missing, with no default", call. = FALSE) + } + x_val <- Fortran("1.0_c_double", Variable("double")) + nrow <- if (has_nrow) r2size(nrow_arg, scope) else r2size(ncol_arg, scope) + ncol <- if (has_ncol) r2size(ncol_arg, scope) else nrow + return(diag_matrix( + x = x_val, + nrow = nrow, + ncol = ncol, + scope = scope, + hoist = hoist, + dest = dest, + context = "diag" + )) + } + + x <- r2f(x_arg, scope, ..., hoist = hoist) + x_rank <- x@value@rank + + if (x_rank == 2L) { + if (has_nrow || has_ncol) { + stop( + "'nrow' or 'ncol' cannot be specified when 'x' is a matrix", + call. = FALSE + ) + } + return(diag_extract( + x = x, + scope = scope, + hoist = hoist, + dest = dest, + context = "diag" + )) + } + + if (x_rank > 2L) { + stop( + "diag() only supports scalar, vector, or matrix inputs", + call. = FALSE + ) + } + + if (!has_nrow && !has_ncol && x_rank == 0L) { + nrow <- r2size(x_arg, scope) + ncol <- nrow + x_val <- Fortran("1.0_c_double", Variable("double")) + return(diag_matrix( + x = x_val, + nrow = nrow, + ncol = ncol, + scope = scope, + hoist = hoist, + dest = dest, + context = "diag" + )) + } + + nrow <- if (has_nrow) r2size(nrow_arg, scope) else NULL + ncol <- if (has_ncol) r2size(ncol_arg, scope) else NULL + + if (is.null(nrow) && is.null(ncol)) { + nrow <- dim_or_one(x, 1L) + ncol <- nrow + } else if (is.null(nrow)) { + nrow <- ncol + } else if (is.null(ncol)) { + ncol <- nrow + } + + diag_matrix( + x = x, + nrow = nrow, + ncol = ncol, + scope = scope, + hoist = hoist, + dest = dest, + context = "diag" + ) + } +) + # Handle forwardsolve() via triangular BLAS routines. register_r2f_handler( "forwardsolve", diff --git a/R/r2f.R b/R/r2f.R index 2f74aeb9..dbd7c18c 100644 --- a/R/r2f.R +++ b/R/r2f.R @@ -590,7 +590,7 @@ r2f_handlers[["["]] <- function( # converted to an integer with var <- args[[1]] - var <- r2f(var, scope, ...) + var <- r2f(var, scope, ..., hoist = hoist) idx_args <- args[-1] drop <- idx_args$drop %||% TRUE @@ -1168,6 +1168,89 @@ maybe_cast_double <- function(x) { } } +dim_is_one <- function(x) { + is_wholenumber(x) && identical(as.integer(x), 1L) +} + +dims_match <- function(left, right) { + if (is_wholenumber(left) && is_wholenumber(right)) { + return(identical(as.integer(left), as.integer(right))) + } + identical(left, right) +} + +reshape_vector_for_matrix <- function(vec, rows, cols) { + stopifnot(inherits(vec, Fortran)) + out_val <- Variable(vec@value@mode, list(rows, cols)) + out_expr <- glue( + "reshape({vec}, [{bind_dim_int(rows)}, {bind_dim_int(cols)}])" + ) + Fortran(out_expr, out_val) +} + +scalarize_matrix <- function(mat) { + stopifnot(inherits(mat, Fortran)) + out_val <- Variable(mat@value@mode) + Fortran(glue("{mat}(1, 1)"), out_val) +} + +maybe_reshape_vector_matrix <- function(left, right) { + if ( + !inherits(left, Fortran) || + !inherits(right, Fortran) || + is.null(left@value) || + is.null(right@value) + ) { + return(list(left = left, right = right)) + } + + left_rank <- left@value@rank + right_rank <- right@value@rank + + if ( + left_rank == 2L && + dim_is_one(left@value@dims[[1L]]) && + dim_is_one(left@value@dims[[2L]]) + ) { + left <- scalarize_matrix(left) + left_rank <- left@value@rank + } + if ( + right_rank == 2L && + dim_is_one(right@value@dims[[1L]]) && + dim_is_one(right@value@dims[[2L]]) + ) { + right <- scalarize_matrix(right) + right_rank <- right@value@rank + } + + if (left_rank == 1L && right_rank == 2L) { + right_dims <- matrix_dims(right) + left_len <- dim_or_one(left, 1L) + if (dim_is_one(right_dims$cols) && dims_match(right_dims$rows, left_len)) { + left <- reshape_vector_for_matrix(left, right_dims$rows, right_dims$cols) + } else if ( + dim_is_one(right_dims$rows) && + dims_match(right_dims$cols, left_len) + ) { + left <- reshape_vector_for_matrix(left, right_dims$rows, right_dims$cols) + } + } else if (left_rank == 2L && right_rank == 1L) { + left_dims <- matrix_dims(left) + right_len <- dim_or_one(right, 1L) + if (dim_is_one(left_dims$cols) && dims_match(left_dims$rows, right_len)) { + right <- reshape_vector_for_matrix(right, left_dims$rows, left_dims$cols) + } else if ( + dim_is_one(left_dims$rows) && + dims_match(left_dims$cols, right_len) + ) { + right <- reshape_vector_for_matrix(right, left_dims$rows, left_dims$cols) + } + } + + list(left = left, right = right) +} + r2f_handlers[["+"]] <- function(args, scope, ...) { # Support both binary and unary plus if (length(args) == 1L) { @@ -1175,6 +1258,9 @@ r2f_handlers[["+"]] <- function(args, scope, ...) { Fortran(glue("(+{x})"), Variable(x@value@mode, x@value@dims)) } else { .[left, right] <- lapply(args, r2f, scope, ...) + reshaped <- maybe_reshape_vector_matrix(left, right) + left <- reshaped$left + right <- reshaped$right Fortran(glue("({left} + {right})"), conform(left@value, right@value)) } } @@ -1186,12 +1272,18 @@ r2f_handlers[["-"]] <- function(args, scope, ...) { Fortran(glue("(-{x})"), Variable(x@value@mode, x@value@dims)) } else { .[left, right] <- lapply(args, r2f, scope, ...) + reshaped <- maybe_reshape_vector_matrix(left, right) + left <- reshaped$left + right <- reshaped$right Fortran(glue("({left} - {right})"), conform(left@value, right@value)) } } r2f_handlers[["*"]] <- function(args, scope = NULL, ...) { .[left, right] <- lapply(args, r2f, scope, ...) + reshaped <- maybe_reshape_vector_matrix(left, right) + left <- reshaped$left + right <- reshaped$right Fortran(glue("({left} * {right})"), conform(left@value, right@value)) } @@ -1199,6 +1291,9 @@ r2f_handlers[["/"]] <- function(args, scope = NULL, ...) { .[left, right] <- lapply(args, r2f, scope, ...) left <- maybe_cast_double(left) right <- maybe_cast_double(right) + reshaped <- maybe_reshape_vector_matrix(left, right) + left <- reshaped$left + right <- reshaped$right Fortran(glue("({left} / {right})"), conform(left@value, right@value)) } @@ -1209,6 +1304,9 @@ r2f_handlers[["as.double"]] <- function(args, scope = NULL, ...) { r2f_handlers[["^"]] <- function(args, scope, ...) { .[left, right] <- lapply(args, r2f, scope, ...) + reshaped <- maybe_reshape_vector_matrix(left, right) + left <- reshaped$left + right <- reshaped$right Fortran(glue("({left} ** {right})"), conform(left@value, right@value)) } diff --git a/doc/matrix/solve-chol-diag-implementation.md b/doc/matrix/solve-chol-diag-implementation.md new file mode 100644 index 00000000..163c5352 --- /dev/null +++ b/doc/matrix/solve-chol-diag-implementation.md @@ -0,0 +1,79 @@ +# Matrix LAPACK Handlers: Implementation Walkthrough + +This document explains the changes made to support `solve()`, `chol()`, +`chol2inv()`, and `diag()` along with the linear-model example. + +## 1) Add dimension expression support + +- `R/manifest.R`: added `min()` and `max()` to the dimension expression + evaluator so Fortran declarations can emit `min(a, b)` and `max(a, b)` + instead of failing on those calls. + +## 2) New BLAS/LAPACK emitters + +- `R/r2f-matrix-blas.R`: introduced LAPACK helpers and diag utilities: + - `lapack_solve()` uses `dgesv` to solve `A %*% x = B` and respects + destination inference while avoiding destructive overwrite of inputs. + - `lapack_inverse()` uses `dgetrf` + `dgetri` for `solve(A)`. + - `lapack_chol()` uses `dpotrf` and zeroes the lower triangle to match + base R `chol()` output. + - `lapack_chol2inv()` uses `dpotri` and mirrors the upper triangle to + produce a full symmetric inverse. + - `diag_extract()` and `diag_matrix()` cover extraction and construction + forms for `diag()`. + - `diag_length_expr()` computes `min(nrow, ncol)` while keeping the + expression symbolic when needed. + - `zero_lower_triangle()` mirrors base R output by clearing the lower + triangle after `dpotrf`. +- Updated `blas_int()` to safely deparse language inputs so expressions like + `int(min(a, b), kind=c_int)` render correctly. + +## 3) Destination inference for new handlers + +- `R/r2f-matrix-infer.R`: added inference helpers for: + - `solve()` (vector, matrix, and inverse cases) + - `chol()` and `chol2inv()` + +This allows the assignment handler to pass a destination and avoid extra +allocations when possible. + +## 4) Register new matrix handlers + +- `R/r2f-matrix.R`: + - Added handlers for `solve()`, `chol()`, `chol2inv()`, and `diag()`. + - Implemented base-R-like argument rules and error behavior. + - Ensured incompatible options (e.g., `pivot=TRUE` for `chol`) are rejected + with clear messages. + +## 5) Vector and scalar reshape behavior + +- `R/r2f.R`: + - Added `maybe_reshape_vector_matrix()` and `scalarize_matrix()` so + elementwise operations can handle vector vs 1x1 matrix and vector vs + matrix with singleton dimensions. + - 1x1 matrices are scalarized via `scalarize_matrix()` (they become a + scalar designator like `x(1, 1)`), which keeps Fortran ranks consistent. + - Vectors can be reshaped into 1xN or Nx1 matrices to match singleton + dimensions when needed. + - This removes rank mismatches in cases like `diag(XtX_inv) * s2` when `s2` + is a 1x1 matrix from `crossprod(res)` and `diag()` returns a vector. + - Also passed `hoist` through `[` lowering so temporary arrays created by + BLAS/LAPACK helpers (e.g., `crossprod(res)` emitting a temp in `syrk()`) + are declared and in scope when immediately subscripted like + `crossprod(res)[1]`. + +## 6) Tests added + +- `tests/testthat/test-matrix-lapack.R`: + - `solve()` vector, matrix, and inverse. + - `chol()` and `chol2inv()`. + - `diag()` for vector input, matrix extraction, and size-based construction. + - Full linear-model example based on the provided code. + +## 7) Commands executed + +- `air format .` +- `R -q -e 'devtools::test()'` +- `R -q -e 'rcmdcheck::rcmdcheck(error_on = "warning")'` + +All tests and `R CMD check` completed without errors or warnings. diff --git a/tests/testthat/test-matrix-lapack.R b/tests/testthat/test-matrix-lapack.R new file mode 100644 index 00000000..68114d47 --- /dev/null +++ b/tests/testthat/test-matrix-lapack.R @@ -0,0 +1,120 @@ +test_that("solve matches R for vector, matrix, and inverse", { + solve_vec <- function(A, b) { + declare( + type(A = double(n, n)), + type(b = double(n)) + ) + solve(A, b) + } + + solve_mat <- function(A, B) { + declare( + type(A = double(n, n)), + type(B = double(n, k)) + ) + solve(A, B) + } + + solve_inv <- function(A) { + declare(type(A = double(n, n))) + solve(A) + } + + set.seed(1) + n <- 5 + k <- 3 + base <- matrix(rnorm(n * n), n, n) + A <- crossprod(base) + diag(n) + b <- rnorm(n) + B <- matrix(rnorm(n * k), n, k) + + expect_quick_equal(solve_vec, list(A = A, b = b)) + expect_quick_equal(solve_mat, list(A = A, B = B)) + expect_quick_equal(solve_inv, list(A = A)) +}) + +test_that("chol and chol2inv match R", { + chol_fn <- function(A) { + declare(type(A = double(n, n))) + chol(A) + } + + chol2inv_fn <- function(A) { + declare(type(A = double(n, n))) + U <- chol(A) + chol2inv(U) + } + + set.seed(2) + n <- 4 + base <- matrix(rnorm(n * n), n, n) + A <- crossprod(base) + diag(n) + + expect_quick_equal(chol_fn, list(A = A)) + expect_quick_equal(chol2inv_fn, list(A = A)) +}) + +test_that("diag matches R for vectors, matrices, and sizes", { + diag_vec <- function(x) { + declare(type(x = double(n))) + diag(x) + } + + diag_mat <- function(A) { + declare(type(A = double(m, n))) + diag(A) + } + + diag_size <- function() { + diag(3L) + } + + diag_value <- function(x) { + declare(type(x = double(1))) + diag(x, nrow = 2, ncol = 3) + } + + set.seed(3) + x <- rnorm(4) + A <- matrix(rnorm(2 * 3), nrow = 2) + + expect_quick_equal(diag_vec, list(x = x)) + expect_quick_equal(diag_mat, list(A = A)) + expect_quick_equal(diag_size, list()) + expect_quick_equal(diag_value, list(x = 2.5)) +}) + +test_that("linear model example matches R", { + my_lm <- function(X, y) { + declare(type(X = double(n, k)), type(y = double(n))) + n <- nrow(X) + k <- ncol(X) + + XtX <- crossprod(X) + Xty <- crossprod(X, y) + coef <- solve(XtX, Xty) + + res <- y - X %*% coef + s2 <- crossprod(res)[1] / (n - k) + + U <- chol(XtX) + XtX_inv <- chol2inv(U) + + std_err <- sqrt(diag(XtX_inv) * s2) + df <- n - k + + list( + coefficients = coef, + stderr = std_err, + df.residual = df + ) + } + + set.seed(4) + n <- 30 + k <- 4 + X <- matrix(rnorm(n * k), n, k) + y <- rnorm(n) + + expect_quick_equal(my_lm, list(X = X, y = y)) +}) From c9a76fb7f542d9aa3de01a49bdf3d296677cbfd7 Mon Sep 17 00:00:00 2001 From: mns-nordicals Date: Fri, 9 Jan 2026 22:15:32 +0100 Subject: [PATCH 02/13] Add note on not inpmelented error propagation --- doc/matrix/solve-chol-diag-implementation.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/doc/matrix/solve-chol-diag-implementation.md b/doc/matrix/solve-chol-diag-implementation.md index 163c5352..7ed986b4 100644 --- a/doc/matrix/solve-chol-diag-implementation.md +++ b/doc/matrix/solve-chol-diag-implementation.md @@ -19,15 +19,20 @@ This document explains the changes made to support `solve()`, `chol()`, base R `chol()` output. - `lapack_chol2inv()` uses `dpotri` and mirrors the upper triangle to produce a full symmetric inverse. - - `diag_extract()` and `diag_matrix()` cover extraction and construction - forms for `diag()`. +- `diag_extract()` and `diag_matrix()` cover extraction and construction + forms for `diag()`. - `diag_length_expr()` computes `min(nrow, ncol)` while keeping the - expression symbolic when needed. + expression symbolic when needed. - `zero_lower_triangle()` mirrors base R output by clearing the lower - triangle after `dpotrf`. + triangle after `dpotrf`. - Updated `blas_int()` to safely deparse language inputs so expressions like `int(min(a, b), kind=c_int)` render correctly. +- Note: LAPACK status (`info`) is not propagated yet, so singular or + non-PD inputs will currently produce undefined numeric results instead of + R errors. This will be revisited once we have a reliable mechanism to + bubble Fortran failures back to R. + ## 3) Destination inference for new handlers - `R/r2f-matrix-infer.R`: added inference helpers for: From 069eeecd24f8a6e96626d740de35d03e6cf7bbc4 Mon Sep 17 00:00:00 2001 From: mns-nordicals Date: Fri, 9 Jan 2026 23:36:57 +0100 Subject: [PATCH 03/13] Testing new helpers maybe_reshape_vector_matrix and reshape_vector_for_matrix that handles vector-like matrices (1x1, 1xn, nx1) and elementwise operator with vectors --- R/r2f.R | 45 ++++++++++------- doc/matrix/solve-chol-diag-implementation.md | 47 ++++++++++++++++++ tests/testthat/test-matrix-internals.R | 21 ++++++++ tests/testthat/test-matrix.R | 51 ++++++++++++++++++++ 4 files changed, 146 insertions(+), 18 deletions(-) diff --git a/R/r2f.R b/R/r2f.R index dbd7c18c..e441cd8b 100644 --- a/R/r2f.R +++ b/R/r2f.R @@ -1172,6 +1172,13 @@ dim_is_one <- function(x) { is_wholenumber(x) && identical(as.integer(x), 1L) } +is_one_by_one <- function(x) { + stopifnot(inherits(x, Fortran)) + x@value@rank == 2L && + dim_is_one(x@value@dims[[1L]]) && + dim_is_one(x@value@dims[[2L]]) +} + dims_match <- function(left, right) { if (is_wholenumber(left) && is_wholenumber(right)) { return(identical(as.integer(left), as.integer(right))) @@ -1182,8 +1189,13 @@ dims_match <- function(left, right) { reshape_vector_for_matrix <- function(vec, rows, cols) { stopifnot(inherits(vec, Fortran)) out_val <- Variable(vec@value@mode, list(rows, cols)) + source <- if (passes_as_scalar(vec@value)) { + glue("[{vec}]") + } else { + glue("{vec}") + } out_expr <- glue( - "reshape({vec}, [{bind_dim_int(rows)}, {bind_dim_int(cols)}])" + "reshape({source}, [{bind_dim_int(rows)}, {bind_dim_int(cols)}])" ) Fortran(out_expr, out_val) } @@ -1207,23 +1219,6 @@ maybe_reshape_vector_matrix <- function(left, right) { left_rank <- left@value@rank right_rank <- right@value@rank - if ( - left_rank == 2L && - dim_is_one(left@value@dims[[1L]]) && - dim_is_one(left@value@dims[[2L]]) - ) { - left <- scalarize_matrix(left) - left_rank <- left@value@rank - } - if ( - right_rank == 2L && - dim_is_one(right@value@dims[[1L]]) && - dim_is_one(right@value@dims[[2L]]) - ) { - right <- scalarize_matrix(right) - right_rank <- right@value@rank - } - if (left_rank == 1L && right_rank == 2L) { right_dims <- matrix_dims(right) left_len <- dim_or_one(left, 1L) @@ -1248,6 +1243,20 @@ maybe_reshape_vector_matrix <- function(left, right) { } } + left_rank <- left@value@rank + right_rank <- right@value@rank + if (left_rank == 2L && right_rank == 1L && is_one_by_one(left)) { + right_len <- dim_or_one(right, 1L) + if (!dim_is_one(right_len)) { + left <- scalarize_matrix(left) + } + } else if (left_rank == 1L && right_rank == 2L && is_one_by_one(right)) { + left_len <- dim_or_one(left, 1L) + if (!dim_is_one(left_len)) { + right <- scalarize_matrix(right) + } + } + list(left = left, right = right) } diff --git a/doc/matrix/solve-chol-diag-implementation.md b/doc/matrix/solve-chol-diag-implementation.md index 7ed986b4..1fee3cf3 100644 --- a/doc/matrix/solve-chol-diag-implementation.md +++ b/doc/matrix/solve-chol-diag-implementation.md @@ -82,3 +82,50 @@ allocations when possible. - `R -q -e 'rcmdcheck::rcmdcheck(error_on = "warning")'` All tests and `R CMD check` completed without errors or warnings. + + +## Ekstra notes + +### On maybe_reshape_vector_matrix +Here’s what that helper is really doing, and why it was added. + +The immediate problem it solved + +After adding LAPACK-backed matrix ops, we started producing 1x1 matrices (e.g., crossprod(res)), then doing elementwise ops with vectors like diag(XtX_inv) * s2. In Fortran, rank‑1 + rank‑2 is illegal unless one side is a scalar. +maybe_reshape_vector_matrix() fixes those rank mismatches by either: +reshaping a vector to 1xN or Nx1 to match a singleton-dimension matrix, or +scalarizing a 1x1 matrix into x(1,1) so it behaves as a scalar in elementwise ops. +What base R actually does here + +In R, vector vs 1x1 matrix does recycle and returns a vector, but it emits a warning: +“Recycling array of length 1 in vector‑array arithmetic is deprecated…” +So the numeric result aligns with treating 1x1 as scalar, but R warns. We don’t currently model those warnings, so the Fortran path silently accepts it. +Why it didn’t show up before + +Before the new matrix handlers, we rarely produced 1x1 matrices as intermediates (e.g., crossprod()/chol()/solve() results), so vector/matrix rank clashes weren’t common. +The linear-model example added a realistic path where they show up (diag of a matrix + a 1x1 matrix scalar from crossprod). + +### On reshape_vector_for_matrix +Why reshape_vector_for_matrix() still matters + +It’s needed when R would recycle a vector across a singleton matrix dimension (e.g., vector + N×1 or 1×N matrix). Fortran requires same-rank arrays for elementwise ops, so we reshape the vector to 1×N or N×1 to make the operation legal and preserve R’s result shape. +It also handles the vector‑length‑1 case so a 1×1 matrix stays a 1×1 matrix (vector becomes 1×1 matrix) instead of forcing scalarization. + +#### Example +f <- (vec, mat) { + declare( + type(vec = double(n)), + type(mat = double(1, n)) + ) + a <- vec + mat + b <- mat + vec + out <- a + b + out +} + +qf <- quick(f) + +x = runif(3) +a = matrix(runif(3), nrow = 1) + +qf(x, a) \ No newline at end of file diff --git a/tests/testthat/test-matrix-internals.R b/tests/testthat/test-matrix-internals.R index e52c51c0..788f909d 100644 --- a/tests/testthat/test-matrix-internals.R +++ b/tests/testthat/test-matrix-internals.R @@ -219,6 +219,27 @@ test_that("bind matrix expression helpers protect against unsupported ranks", { expect_match(spread_row, "spread", fixed = FALSE) }) +test_that("maybe_reshape_vector_matrix reshapes vectors for singleton matrices", { + vec <- quickr:::Fortran("v", quickr:::Variable("double", list(3L))) + mat_row <- quickr:::Fortran("m", quickr:::Variable("double", list(1L, 3L))) + mat_scalar <- quickr:::Fortran("s", quickr:::Variable("double", list(1L, 1L))) + vec_one <- quickr:::Fortran("w", quickr:::Variable("double", list(1L))) + + reshaped <- quickr:::maybe_reshape_vector_matrix(vec, mat_row) + expect_identical(reshaped$left@value@rank, 2L) + expect_identical(reshaped$left@value@dims, list(1L, 3L)) + expect_identical(reshaped$right@value@dims, list(1L, 3L)) + + reshaped <- quickr:::maybe_reshape_vector_matrix(vec_one, mat_scalar) + expect_identical(reshaped$left@value@rank, 2L) + expect_identical(reshaped$left@value@dims, list(1L, 1L)) + expect_identical(reshaped$right@value@dims, list(1L, 1L)) + + reshaped <- quickr:::maybe_reshape_vector_matrix(vec, mat_scalar) + expect_identical(reshaped$left@value@rank, 1L) + expect_identical(reshaped$right@value@rank, 0L) +}) + test_that("unwrap_transpose_arg handles scalar inputs and rank errors", { scope <- quickr:::new_scope(NULL) scope@assign("a", quickr:::Variable("double", name = "a")) diff --git a/tests/testthat/test-matrix.R b/tests/testthat/test-matrix.R index 8f79c326..ba5652bd 100644 --- a/tests/testthat/test-matrix.R +++ b/tests/testthat/test-matrix.R @@ -70,3 +70,54 @@ test_that("reuse implicit size", { # bench::mark(fn(a1, a2), qfn(a1, a2)) |> print() |> plot() }) + +test_that("elementwise vector and singleton matrix keep matrix shape", { + fn <- function(vec, mat) { + declare( + type(vec = double(n)), + type(mat = double(1L, n)) + ) + left_side_vec <- vec + mat + right_side_vec <- mat + vec + out <- left_side_vec + right_side_vec + out + } + + expect_quick_identical( + fn, + list(runif(3), matrix(runif(3), nrow = 1L)) + ) +}) + +test_that("elementwise ops reshape vectors for singleton matrices", { + fn <- function(vec, mat) { + declare( + type(vec = double(n)), + type(mat = double(1L, n)) + ) + a <- vec - mat + b <- mat * vec + c <- vec / mat + a + b + c + } + + expect_quick_identical( + fn, + list(runif(3) + 1, matrix(runif(3) + 1, nrow = 1L)) + ) +}) + +test_that("1x1 matrix preserves matrix result with length-1 vector", { + fn <- function(vec, mat) { + declare( + type(vec = double(1L)), + type(mat = double(1L, 1L)) + ) + vec + mat + } + + expect_quick_identical( + fn, + list(runif(1), matrix(runif(1), nrow = 1L)) + ) +}) From 215a9b0bd746f2361be46042bbdbf3e3d25ee8da Mon Sep 17 00:00:00 2001 From: mns-nordicals Date: Sat, 10 Jan 2026 00:12:49 +0100 Subject: [PATCH 04/13] Test the new hoising in "[" handler and that it work in genereal to acess functions like t(x)[5] , crossprod(x)[1] and related. --- doc/matrix/solve-chol-diag-implementation.md | 30 +++++++++++++++++++- tests/testthat/test-matrix-internals.R | 14 +++++++++ tests/testthat/test-matrix-lapack.R | 13 +++++++++ tests/testthat/test-matrix.R | 19 +++++++++++++ 4 files changed, 75 insertions(+), 1 deletion(-) diff --git a/doc/matrix/solve-chol-diag-implementation.md b/doc/matrix/solve-chol-diag-implementation.md index 1fee3cf3..245c47bd 100644 --- a/doc/matrix/solve-chol-diag-implementation.md +++ b/doc/matrix/solve-chol-diag-implementation.md @@ -66,6 +66,8 @@ allocations when possible. BLAS/LAPACK helpers (e.g., `crossprod(res)` emitting a temp in `syrk()`) are declared and in scope when immediately subscripted like `crossprod(res)[1]`. + This matters because Fortran cannot subscript arbitrary expressions, so + hoisting ensures the temp has a name and valid storage before `[...]`. ## 6) Tests added @@ -128,4 +130,30 @@ qf <- quick(f) x = runif(3) a = matrix(runif(3), nrow = 1) -qf(x, a) \ No newline at end of file +qf(x, a) + +## On changes to [ - handler +In order to silence a warning form R that made tests fail codex add hoist to "[" handler. This creates a new tmp that we then acesss with []. + +### Example + +fn <- function(x) { + declare(type(x = double(5,5))) + first_element <- t(x)[1] + second_row <- t(x)[2, ] + third_col <- t(x)[, 3] + sub_matrix <- t(x)[c(1,2), c(3,4)] + out <- list( + first_element = first_element, + second_row = second_row, + third_col = third_col, + sub_matrix = sub_matrix + ) + out +} + +x <- matrix(runif(5*5), 5, 5) + +qfn <- quick(fn) +fn(x) +qfn(x) diff --git a/tests/testthat/test-matrix-internals.R b/tests/testthat/test-matrix-internals.R index 788f909d..ddff8c8c 100644 --- a/tests/testthat/test-matrix-internals.R +++ b/tests/testthat/test-matrix-internals.R @@ -240,6 +240,20 @@ test_that("maybe_reshape_vector_matrix reshapes vectors for singleton matrices", expect_identical(reshaped$right@value@rank, 0L) }) +test_that("indexing matrix expressions can hoist temporaries", { + fn <- function(x) { + declare(type(x = double(n, k))) + t(x)[1] + } + + code <- as.character(r2f(fn)) + tmp <- regmatches(code, regexpr("btmp[0-9]+_", code)) + expect_true(nzchar(tmp)) + expect_match(code, paste0(tmp, " = transpose\\(x\\)")) + expect_match(code, paste0("out_ = ", tmp, "\\(")) + expect_false(grepl("transpose\\(x\\)\\(", code)) +}) + test_that("unwrap_transpose_arg handles scalar inputs and rank errors", { scope <- quickr:::new_scope(NULL) scope@assign("a", quickr:::Variable("double", name = "a")) diff --git a/tests/testthat/test-matrix-lapack.R b/tests/testthat/test-matrix-lapack.R index 68114d47..f6178467 100644 --- a/tests/testthat/test-matrix-lapack.R +++ b/tests/testthat/test-matrix-lapack.R @@ -95,6 +95,8 @@ test_that("linear model example matches R", { coef <- solve(XtX, Xty) res <- y - X %*% coef + ## crossprod(res)[1] was added by codex to silence 1x1 warnings in R + ## s2 <- crossprod(res)[1] / (n - k) U <- chol(XtX) @@ -118,3 +120,14 @@ test_that("linear model example matches R", { expect_quick_equal(my_lm, list(X = X, y = y)) }) + +test_that("crossprod temp can be indexed directly", { + fn <- function(x) { + declare(type(x = double(n, k))) + crossprod(x)[1] + } + + set.seed(11) + x <- matrix(rnorm(6), 3, 2) + expect_quick_equal(fn, list(x = x)) +}) diff --git a/tests/testthat/test-matrix.R b/tests/testthat/test-matrix.R index ba5652bd..726ffcae 100644 --- a/tests/testthat/test-matrix.R +++ b/tests/testthat/test-matrix.R @@ -121,3 +121,22 @@ test_that("1x1 matrix preserves matrix result with length-1 vector", { list(runif(1), matrix(runif(1), nrow = 1L)) ) }) + +test_that("indexing function like transposed expressions hoists temporaries that can be accessed", { + fn <- function(x) { + declare(type(x = double(5, 5))) + first_element <- t(x)[1] + second_row <- t(x)[2, ] + third_col <- t(x)[, 3] + sub_matrix <- t(x)[c(1, 2), c(3, 4)] + list( + first_element = first_element, + second_row = second_row, + third_col = third_col, + sub_matrix = sub_matrix + ) + } + + x <- matrix(runif(25), 5, 5) + expect_quick_identical(fn, list(x = x)) +}) From 3846373090ffbf11d09acc8a0c7287d2f7d610e3 Mon Sep 17 00:00:00 2001 From: mns-nordicals Date: Sat, 10 Jan 2026 00:27:54 +0100 Subject: [PATCH 05/13] Add more test and fix bug i diag() --- R/r2f-matrix.R | 8 +++- tests/testthat/test-matrix-lapack.R | 68 +++++++++++++++++++++++++++++ tests/testthat/test-matrix.R | 18 ++++++++ 3 files changed, 93 insertions(+), 1 deletion(-) diff --git a/R/r2f-matrix.R b/R/r2f-matrix.R index 23b9955d..afa7bc42 100644 --- a/R/r2f-matrix.R +++ b/R/r2f-matrix.R @@ -631,7 +631,10 @@ register_r2f_handler( register_r2f_handler( "diag", function(args, scope, ..., hoist = NULL, dest = NULL) { - x_arg <- args$x %||% args[[1L]] + arg_names <- names(args) + first_named <- length(arg_names) >= 1L && nzchar(arg_names[[1L]]) + first_is_dim <- first_named && arg_names[[1L]] %in% c("nrow", "ncol") + x_arg <- if (first_is_dim) NULL else args$x %||% args[[1L]] nrow_arg <- args$nrow ncol_arg <- args$ncol if (!is.null(args$names) && !is_missing(args$names)) { @@ -645,6 +648,9 @@ register_r2f_handler( if (!has_nrow && !has_ncol) { stop("argument \"nrow\" is missing, with no default", call. = FALSE) } + if (!has_nrow && has_ncol) { + stop("argument \"nrow\" is missing, with no default", call. = FALSE) + } x_val <- Fortran("1.0_c_double", Variable("double")) nrow <- if (has_nrow) r2size(nrow_arg, scope) else r2size(ncol_arg, scope) ncol <- if (has_ncol) r2size(ncol_arg, scope) else nrow diff --git a/tests/testthat/test-matrix-lapack.R b/tests/testthat/test-matrix-lapack.R index f6178467..27ec9bce 100644 --- a/tests/testthat/test-matrix-lapack.R +++ b/tests/testthat/test-matrix-lapack.R @@ -33,6 +33,33 @@ test_that("solve matches R for vector, matrix, and inverse", { expect_quick_equal(solve_inv, list(A = A)) }) +test_that("solve handles column RHS matrices and 1x1 systems", { + solve_col <- function(A, B) { + declare( + type(A = double(n, n)), + type(B = double(n, 1L)) + ) + solve(A, B) + } + + solve_scalar <- function(A, b) { + declare( + type(A = double(1L, 1L)), + type(b = double(1L)) + ) + solve(A, b) + } + + set.seed(10) + n <- 4 + base <- matrix(rnorm(n * n), n, n) + A <- crossprod(base) + diag(n) + B <- matrix(rnorm(n), n, 1L) + + expect_quick_equal(solve_col, list(A = A, B = B)) + expect_quick_equal(solve_scalar, list(A = matrix(2.5, 1L, 1L), b = 1.25)) +}) + test_that("chol and chol2inv match R", { chol_fn <- function(A) { declare(type(A = double(n, n))) @@ -54,6 +81,22 @@ test_that("chol and chol2inv match R", { expect_quick_equal(chol2inv_fn, list(A = A)) }) +test_that("chol and chol2inv handle 1x1 matrices", { + chol_scalar <- function(A) { + declare(type(A = double(1L, 1L))) + chol(A) + } + + chol2inv_scalar <- function(A) { + declare(type(A = double(1L, 1L))) + U <- chol(A) + chol2inv(U) + } + + expect_quick_equal(chol_scalar, list(A = matrix(3.2, 1L, 1L))) + expect_quick_equal(chol2inv_scalar, list(A = matrix(3.2, 1L, 1L))) +}) + test_that("diag matches R for vectors, matrices, and sizes", { diag_vec <- function(x) { declare(type(x = double(n))) @@ -84,6 +127,31 @@ test_that("diag matches R for vectors, matrices, and sizes", { expect_quick_equal(diag_value, list(x = 2.5)) }) +test_that("diag handles missing x with nrow/ncol and 1x1 matrices", { + diag_nrow <- function(n) { + declare(type(n = integer(1))) + diag(nrow = n) + } + + diag_ncol <- function(n) { + declare(type(n = integer(1))) + diag(ncol = n) + } + + diag_rowvec <- function(A) { + declare(type(A = double(1L, n))) + diag(A) + } + + expect_quick_equal(diag_nrow, list(n = 3L)) + expect_error(diag_ncol(2L), "nrow") + expect_error(quick(diag_ncol)(2L), "nrow") + expect_quick_equal( + diag_rowvec, + list(A = matrix(runif(3), nrow = 1L)) + ) +}) + test_that("linear model example matches R", { my_lm <- function(X, y) { declare(type(X = double(n, k)), type(y = double(n))) diff --git a/tests/testthat/test-matrix.R b/tests/testthat/test-matrix.R index 726ffcae..4c8b76a6 100644 --- a/tests/testthat/test-matrix.R +++ b/tests/testthat/test-matrix.R @@ -89,6 +89,24 @@ test_that("elementwise vector and singleton matrix keep matrix shape", { ) }) +test_that("elementwise vector and singleton column matrix keep matrix shape", { + fn <- function(vec, mat) { + declare( + type(vec = double(n)), + type(mat = double(n, 1L)) + ) + left_side_vec <- vec + mat + right_side_vec <- mat + vec + out <- left_side_vec + right_side_vec + out + } + + expect_quick_identical( + fn, + list(runif(4), matrix(runif(4), ncol = 1L)) + ) +}) + test_that("elementwise ops reshape vectors for singleton matrices", { fn <- function(vec, mat) { declare( From 50b8521fe03eb2d107098ee167b07988aacc8a42 Mon Sep 17 00:00:00 2001 From: mns-nordicals Date: Sat, 10 Jan 2026 00:35:13 +0100 Subject: [PATCH 06/13] Add simple tests to the inference file --- tests/testthat/test-matrix-inference.R | 41 ++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/tests/testthat/test-matrix-inference.R b/tests/testthat/test-matrix-inference.R index 47aa74d4..7b9c9125 100644 --- a/tests/testthat/test-matrix-inference.R +++ b/tests/testthat/test-matrix-inference.R @@ -65,7 +65,39 @@ test_that("matrix ops infer destination sizes for assignments", { out } + solve_vec_infer <- function(A, b) { + declare(type(A = double(n, n)), type(b = double(n))) + out <- solve(A, b) + out + } + + solve_mat_infer <- function(A, B) { + declare(type(A = double(n, n)), type(B = double(n, k))) + out <- solve(A, B) + out + } + + solve_inv_infer <- function(A) { + declare(type(A = double(n, n))) + out <- solve(A) + out + } + + chol_infer <- function(A) { + declare(type(A = double(n, n))) + out <- chol(A) + out + } + + chol2inv_infer <- function(A) { + declare(type(A = double(n, n))) + out <- chol2inv(chol(A)) + out + } + set.seed(99) + n <- 4 + k <- 2 A <- matrix(rnorm(6), nrow = 2) B <- matrix(rnorm(6), nrow = 3) x2 <- rnorm(2) @@ -80,6 +112,10 @@ test_that("matrix ops infer destination sizes for assignments", { U <- matrix(c(2, 1, 0, 3), nrow = 2, byrow = TRUE) b_mat <- matrix(rnorm(4), nrow = 2) b_vec <- rnorm(2) + base <- matrix(rnorm(n * n), n, n) + A_pd <- crossprod(base) + diag(n) + b_solve <- rnorm(n) + B_solve <- matrix(rnorm(n * k), n, k) expect_quick_equal(matmul_infer, list(A = A, B = B)) expect_quick_equal(matvec_infer, list(A = A, x = x3)) @@ -92,6 +128,11 @@ test_that("matrix ops infer destination sizes for assignments", { expect_quick_equal(outer_op_infer, list(x = v2, y = v3)) expect_quick_equal(forward_infer, list(L = L, b = b_mat)) expect_quick_equal(back_infer, list(U = U, b = b_vec)) + expect_quick_equal(solve_vec_infer, list(A = A_pd, b = b_solve)) + expect_quick_equal(solve_mat_infer, list(A = A_pd, B = B_solve)) + expect_quick_equal(solve_inv_infer, list(A = A_pd)) + expect_quick_equal(chol_infer, list(A = A_pd)) + expect_quick_equal(chol2inv_infer, list(A = A_pd)) }) test_that("matrix helpers report unsupported inputs", { From ae93bbe2632da54acd3eafb5a396b09cd01f949f Mon Sep 17 00:00:00 2001 From: mns-nordicals Date: Sat, 10 Jan 2026 00:42:54 +0100 Subject: [PATCH 07/13] Test bad paths and fix bug in diag --- R/r2f-matrix.R | 7 ++- tests/testthat/test-matrix-lapack.R | 71 +++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 2 deletions(-) diff --git a/R/r2f-matrix.R b/R/r2f-matrix.R index afa7bc42..8860c996 100644 --- a/R/r2f-matrix.R +++ b/R/r2f-matrix.R @@ -632,9 +632,12 @@ register_r2f_handler( "diag", function(args, scope, ..., hoist = NULL, dest = NULL) { arg_names <- names(args) - first_named <- length(arg_names) >= 1L && nzchar(arg_names[[1L]]) + has_first <- length(args) >= 1L + first_named <- has_first && + length(arg_names) >= 1L && + nzchar(arg_names[[1L]]) first_is_dim <- first_named && arg_names[[1L]] %in% c("nrow", "ncol") - x_arg <- if (first_is_dim) NULL else args$x %||% args[[1L]] + x_arg <- if (!has_first || first_is_dim) NULL else args$x %||% args[[1L]] nrow_arg <- args$nrow ncol_arg <- args$ncol if (!is.null(args$names) && !is_missing(args$names)) { diff --git a/tests/testthat/test-matrix-lapack.R b/tests/testthat/test-matrix-lapack.R index 27ec9bce..0863addf 100644 --- a/tests/testthat/test-matrix-lapack.R +++ b/tests/testthat/test-matrix-lapack.R @@ -152,6 +152,77 @@ test_that("diag handles missing x with nrow/ncol and 1x1 matrices", { ) }) +test_that("Test bad path in lapack functions", { + solve_bad_rank <- function(a, b) { + declare(type(a = double(n)), type(b = double(n))) + solve(a, b) + } + + solve_non_square <- function(a, b) { + declare(type(a = double(2, 3)), type(b = double(2))) + solve(a, b) + } + + solve_bad_rhs <- function(a, b) { + declare(type(a = double(2, 2)), type(b = double(2, 2, 2))) + solve(a, b) + } + + chol_bad_rank <- function(a) { + declare(type(a = double(2, 2, 2))) + chol(a) + } + + chol_pivot <- function(a) { + declare(type(a = double(2, 2))) + chol(a, pivot = TRUE) + } + + chol_linpack <- function(a) { + declare(type(a = double(2, 2))) + chol(a, LINPACK = TRUE) + } + + chol2inv_size <- function(a) { + declare(type(a = double(2, 2))) + chol2inv(a, size = 1L) + } + + chol2inv_bad_rank <- function(a) { + declare(type(a = double(2))) + chol2inv(a) + } + + diag_bad_rank <- function(a) { + declare(type(a = double(2, 2, 2))) + diag(a) + } + + diag_matrix_nrow <- function(a) { + declare(type(a = double(2, 2))) + diag(a, nrow = 2L) + } + + diag_missing <- function() { + diag() + } + + expect_error(quick(solve_bad_rank), "expects a matrix") + expect_error(quick(solve_non_square), "requires a square matrix") + expect_error(quick(solve_bad_rhs), "only supports vector or matrix") + expect_error(quick(chol_bad_rank), "expects a matrix") + expect_error(quick(chol_pivot), "pivot = TRUE") + expect_error(quick(chol_linpack), "LINPACK") + expect_error(quick(chol2inv_size), "does not support size") + expect_error(quick(chol2inv_bad_rank), "expects a matrix") + expect_error( + quick(diag_bad_rank), + "only supports scalar, vector, or matrix" + ) + expect_error(quick(diag_matrix_nrow), "cannot be specified") + expect_error(quick(diag_missing), "argument \"nrow\" is missing") +}) + test_that("linear model example matches R", { my_lm <- function(X, y) { declare(type(X = double(n, k)), type(y = double(n))) From 9dbffcf557509c93659c46d0bf322e0c514d9ae6 Mon Sep 17 00:00:00 2001 From: mns-nordicals Date: Sat, 10 Jan 2026 01:20:12 +0100 Subject: [PATCH 08/13] Adress codex review --- R/r2f-matrix.R | 21 +++++++++++++++------ tests/testthat/test-matrix-lapack.R | 6 ++++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/R/r2f-matrix.R b/R/r2f-matrix.R index 8860c996..8024c926 100644 --- a/R/r2f-matrix.R +++ b/R/r2f-matrix.R @@ -632,12 +632,21 @@ register_r2f_handler( "diag", function(args, scope, ..., hoist = NULL, dest = NULL) { arg_names <- names(args) - has_first <- length(args) >= 1L - first_named <- has_first && - length(arg_names) >= 1L && - nzchar(arg_names[[1L]]) - first_is_dim <- first_named && arg_names[[1L]] %in% c("nrow", "ncol") - x_arg <- if (!has_first || first_is_dim) NULL else args$x %||% args[[1L]] + if (is.null(arg_names)) { + arg_names <- rep("", length(args)) + } + x_arg <- NULL + if (!is.null(args$x) && !is_missing(args$x)) { + x_arg <- args$x + } else if (length(args) >= 1L) { + unnamed_idx <- which(!nzchar(arg_names) | is.na(arg_names)) + if (length(unnamed_idx) >= 1L) { + candidate <- args[[unnamed_idx[[1L]]]] + if (!is_missing(candidate)) { + x_arg <- candidate + } + } + } nrow_arg <- args$nrow ncol_arg <- args$ncol if (!is.null(args$names) && !is_missing(args$names)) { diff --git a/tests/testthat/test-matrix-lapack.R b/tests/testthat/test-matrix-lapack.R index 0863addf..b7fed7d3 100644 --- a/tests/testthat/test-matrix-lapack.R +++ b/tests/testthat/test-matrix-lapack.R @@ -117,6 +117,11 @@ test_that("diag matches R for vectors, matrices, and sizes", { diag(x, nrow = 2, ncol = 3) } + diag_named_order <- function(x) { + declare(type(x = double(n))) + diag(nrow = 3L, x = x) + } + set.seed(3) x <- rnorm(4) A <- matrix(rnorm(2 * 3), nrow = 2) @@ -125,6 +130,7 @@ test_that("diag matches R for vectors, matrices, and sizes", { expect_quick_equal(diag_mat, list(A = A)) expect_quick_equal(diag_size, list()) expect_quick_equal(diag_value, list(x = 2.5)) + expect_quick_equal(diag_named_order, list(x = c(1, 2))) }) test_that("diag handles missing x with nrow/ncol and 1x1 matrices", { From 38b274aaf984a440ec43f5eac800c5a8e6f9100f Mon Sep 17 00:00:00 2001 From: mns-nordicals Date: Sat, 10 Jan 2026 15:22:42 +0100 Subject: [PATCH 09/13] Add destination inference for diag() and fix argument handling Add dest_infer support for diag() to eliminate unnecessary temporary matrix allocations. Previously, `out <- diag(x, nrow, ncol)` would allocate a temporary matrix, fill it, then copy to out. Now it writes directly to the destination. Also fix argument extraction to support both named and positional args: - diag(): was ignoring positional nrow/ncol args (e.g., `diag(x, 5, 7)`) - crossprod/tcrossprod: add support for named x/y args - forwardsolve/backsolve: add support for named l/r/x args - chol/chol2inv: add support for named x arg This ensures handlers and inference functions match R's function signatures and work correctly regardless of calling convention. --- R/r2f-matrix-infer.R | 162 ++++++++++++++++++++++++++++++++++++++----- R/r2f-matrix.R | 53 +++++++++----- 2 files changed, 182 insertions(+), 33 deletions(-) diff --git a/R/r2f-matrix-infer.R b/R/r2f-matrix-infer.R index 45646ed0..026d0748 100644 --- a/R/r2f-matrix-infer.R +++ b/R/r2f-matrix-infer.R @@ -98,11 +98,13 @@ infer_dest_matmul <- function(args, scope) { # Shared inference for crossprod/tcrossprod destination sizes. infer_dest_crossprod_like <- function(args, scope, trans) { - x <- infer_symbol_var(args[[1L]], scope) + x_arg <- args$x %||% args[[1L]] + x <- infer_symbol_var(x_arg, scope) if (is.null(x)) { return(NULL) } - y <- if (length(args) > 1L) infer_symbol_var(args[[2L]], scope) else NULL + y_arg <- args$y %||% if (length(args) > 1L) args[[2L]] else NULL + y <- if (!is.null(y_arg)) infer_symbol_var(y_arg, scope) else NULL x_dims <- matrix_dims_var(x) if (is.null(y)) { n <- if (identical(trans, "T")) x_dims$cols else x_dims$rows @@ -144,12 +146,17 @@ infer_dest_outer <- function(args, scope) { } # Infer destination dimensions for forwardsolve() and backsolve(). +# forwardsolve(l, x, ...), backsolve(r, x, ...) infer_dest_triangular <- function(args, scope) { if (length(args) < 2L) { return(NULL) } - A <- infer_symbol_var(args[[1L]], scope) - B <- infer_symbol_var(args[[2L]], scope) + # First arg is l (forwardsolve) or r (backsolve) + a_arg <- args$l %||% args$r %||% args[[1L]] + # Second arg is x + b_arg <- args$x %||% args[[2L]] + A <- infer_symbol_var(a_arg, scope) + B <- infer_symbol_var(b_arg, scope) if (is.null(A) || is.null(B)) { return(NULL) } @@ -194,28 +201,151 @@ infer_dest_solve <- function(args, scope) { # Infer destination dimensions for chol(). infer_dest_chol <- function(args, scope) { - a_arg <- args[[1L]] - if (is.null(a_arg)) { + x_arg <- args$x %||% args[[1L]] + if (is.null(x_arg)) { return(NULL) } - A <- infer_symbol_var(a_arg, scope) - if (is.null(A) || A@rank != 2L) { + X <- infer_symbol_var(x_arg, scope) + if (is.null(X) || X@rank != 2L) { return(NULL) } - a_dims <- matrix_dims_var(A) - Variable("double", list(a_dims$rows, a_dims$cols)) + x_dims <- matrix_dims_var(X) + Variable("double", list(x_dims$rows, x_dims$cols)) } # Infer destination dimensions for chol2inv(). infer_dest_chol2inv <- function(args, scope) { - r_arg <- args[[1L]] - if (is.null(r_arg)) { + x_arg <- args$x %||% args[[1L]] + if (is.null(x_arg)) { return(NULL) } - R <- infer_symbol_var(r_arg, scope) - if (is.null(R) || R@rank != 2L) { + X <- infer_symbol_var(x_arg, scope) + if (is.null(X) || X@rank != 2L) { + return(NULL) + } + x_dims <- matrix_dims_var(X) + Variable("double", list(x_dims$rows, x_dims$cols)) +} + +# Helper to infer a size from a literal or symbol. +infer_size <- function(arg, scope) { + if (is.null(arg) || is_missing(arg)) { + return(NULL) + } + if (is.numeric(arg) && length(arg) == 1L && is_wholenumber(arg)) { + return(as.integer(arg)) + } + if (is.symbol(arg)) { + var <- get0(as.character(arg), scope, inherits = FALSE) + if (!inherits(var, Variable)) { + return(NULL) + } + # Scalar (rank 0) or length-1 vector (rank 1 with dim 1) + if (var@rank == 0L) { + return(arg) + } + if (var@rank == 1L && length(var@dims) == 1L) { + d <- var@dims[[1L]] + if (is_wholenumber(d) && identical(as.integer(d), 1L)) { + return(arg) + } + } + } + NULL +} + +# Infer destination dimensions for diag(). +infer_dest_diag <- function(args, scope) { + # R signature: diag(x = 1, nrow, ncol, names = TRUE) + # Handle both named and positional arguments + arg_names <- names(args) + if (is.null(arg_names)) { + arg_names <- rep("", length(args)) + } + unnamed_idx <- which(!nzchar(arg_names) | is.na(arg_names)) + + # Extract x (named or position 1) + x_arg <- NULL + if (!is.null(args$x) && !is_missing(args$x)) { + x_arg <- args$x + } else if (length(unnamed_idx) >= 1L) { + candidate <- args[[unnamed_idx[[1L]]]] + if (!is_missing(candidate)) { + x_arg <- candidate + } + } + + # Extract nrow (named or position 2) + nrow_arg <- args$nrow + if (is.null(nrow_arg) && length(unnamed_idx) >= 2L) { + nrow_arg <- args[[unnamed_idx[[2L]]]] + } + + # Extract ncol (named or position 3) + ncol_arg <- args$ncol + if (is.null(ncol_arg) && length(unnamed_idx) >= 3L) { + ncol_arg <- args[[unnamed_idx[[3L]]]] + } + + has_nrow <- !is.null(nrow_arg) && !is_missing(nrow_arg) + has_ncol <- !is.null(ncol_arg) && !is_missing(ncol_arg) + + # Case: no x, just nrow (identity matrix) + if (is.null(x_arg) || is_missing(x_arg)) { + if (!has_nrow) { + return(NULL) + } + nrow <- infer_size(nrow_arg, scope) + if (is.null(nrow)) { + return(NULL) + } + ncol <- if (has_ncol) infer_size(ncol_arg, scope) else nrow + if (is.null(ncol)) { + return(NULL) + } + return(Variable("double", list(nrow, ncol))) + } + + x <- infer_symbol_var(x_arg, scope) + + # Case: x is a matrix -> extract diagonal (returns vector) + if (!is.null(x) && x@rank == 2L) { + x_dims <- matrix_dims_var(x) + diag_len <- diag_length_expr(x_dims$rows, x_dims$cols, "diag") + return(Variable("double", list(diag_len))) + } + + # Case: x is a scalar literal (identity matrix of that size) + if (is.null(x) && is.numeric(x_arg) && length(x_arg) == 1L) { + if (!has_nrow && !has_ncol && is_wholenumber(x_arg)) { + n <- as.integer(x_arg) + return(Variable("double", list(n, n))) + } + } + + # Case: x is a scalar symbol without nrow/ncol (identity matrix) + if (!is.null(x) && x@rank == 0L && !has_nrow && !has_ncol) { return(NULL) } - r_dims <- matrix_dims_var(R) - Variable("double", list(r_dims$rows, r_dims$cols)) + + # Case: x is a vector or scalar, construct diagonal matrix + if (!is.null(x) && x@rank <= 1L) { + if (has_nrow || has_ncol) { + nrow <- if (has_nrow) infer_size(nrow_arg, scope) else NULL + ncol <- if (has_ncol) infer_size(ncol_arg, scope) else NULL + if (is.null(nrow) && is.null(ncol)) { + return(NULL) + } + if (is.null(nrow)) nrow <- ncol + if (is.null(ncol)) ncol <- nrow + return(Variable("double", list(nrow, ncol))) + } + # No nrow/ncol: square matrix from vector length + if (x@rank == 1L) { + len <- var_dim_or_one(x, 1L) + return(Variable("double", list(len, len))) + } + } + + NULL } diff --git a/R/r2f-matrix.R b/R/r2f-matrix.R index 8024c926..36a722f8 100644 --- a/R/r2f-matrix.R +++ b/R/r2f-matrix.R @@ -440,8 +440,8 @@ register_r2f_handler( register_r2f_handler( "crossprod", function(args, scope, ..., hoist = NULL, dest = NULL) { - x_arg <- args[[1L]] - y_arg <- if (length(args) > 1L) args[[2L]] else NULL + x_arg <- args$x %||% args[[1L]] + y_arg <- args$y %||% if (length(args) > 1L) args[[2L]] else NULL crossprod_like( x_arg = x_arg, y_arg = y_arg, @@ -464,8 +464,8 @@ register_r2f_handler( register_r2f_handler( "tcrossprod", function(args, scope, ..., hoist = NULL, dest = NULL) { - x_arg <- args[[1L]] - y_arg <- if (length(args) > 1L) args[[2L]] else NULL + x_arg <- args$x %||% args[[1L]] + y_arg <- args$y %||% if (length(args) > 1L) args[[2L]] else NULL crossprod_like( x_arg = x_arg, y_arg = y_arg, @@ -607,7 +607,7 @@ register_r2f_handler( register_r2f_handler( "chol2inv", function(args, scope, ..., hoist = NULL, dest = NULL) { - x_arg <- args[[1L]] + x_arg <- args$x %||% args[[1L]] if (is.null(x_arg) || is_missing(x_arg)) { stop("chol2inv() expects `x`", call. = FALSE) } @@ -631,24 +631,37 @@ register_r2f_handler( register_r2f_handler( "diag", function(args, scope, ..., hoist = NULL, dest = NULL) { + # R signature: diag(x = 1, nrow, ncol, names = TRUE) + # Handle both named and positional arguments arg_names <- names(args) if (is.null(arg_names)) { arg_names <- rep("", length(args)) } + unnamed_idx <- which(!nzchar(arg_names) | is.na(arg_names)) + + # Extract x (named or position 1) x_arg <- NULL if (!is.null(args$x) && !is_missing(args$x)) { x_arg <- args$x - } else if (length(args) >= 1L) { - unnamed_idx <- which(!nzchar(arg_names) | is.na(arg_names)) - if (length(unnamed_idx) >= 1L) { - candidate <- args[[unnamed_idx[[1L]]]] - if (!is_missing(candidate)) { - x_arg <- candidate - } + } else if (length(unnamed_idx) >= 1L) { + candidate <- args[[unnamed_idx[[1L]]]] + if (!is_missing(candidate)) { + x_arg <- candidate } } + + # Extract nrow (named or position 2) nrow_arg <- args$nrow + if (is.null(nrow_arg) && length(unnamed_idx) >= 2L) { + nrow_arg <- args[[unnamed_idx[[2L]]]] + } + + # Extract ncol (named or position 3) ncol_arg <- args$ncol + if (is.null(ncol_arg) && length(unnamed_idx) >= 3L) { + ncol_arg <- args[[unnamed_idx[[3L]]]] + } + if (!is.null(args$names) && !is_missing(args$names)) { logical_arg_or_default(args, "names", TRUE, "diag()") } @@ -739,7 +752,9 @@ register_r2f_handler( dest = dest, context = "diag" ) - } + }, + dest_supported = TRUE, + dest_infer = infer_dest_diag ) # Handle forwardsolve() via triangular BLAS routines. @@ -764,8 +779,10 @@ register_r2f_handler( ) diag_unit <- logical_arg_or_default(args, "diag", FALSE, "forwardsolve()") - A <- r2f(args[[1L]], scope, ..., hoist = hoist) - B <- r2f(args[[2L]], scope, ..., hoist = hoist) + l_arg <- args$l %||% args[[1L]] + x_arg <- args$x %||% args[[2L]] + A <- r2f(l_arg, scope, ..., hoist = hoist) + B <- r2f(x_arg, scope, ..., hoist = hoist) triangular_solve( A = A, @@ -795,8 +812,10 @@ register_r2f_handler( transpose <- logical_arg_or_default(args, "transpose", FALSE, "backsolve()") diag_unit <- logical_arg_or_default(args, "diag", FALSE, "backsolve()") - A <- r2f(args[[1L]], scope, ..., hoist = hoist) - B <- r2f(args[[2L]], scope, ..., hoist = hoist) + r_arg <- args$r %||% args[[1L]] + x_arg <- args$x %||% args[[2L]] + A <- r2f(r_arg, scope, ..., hoist = hoist) + B <- r2f(x_arg, scope, ..., hoist = hoist) triangular_solve( A = A, From db9b10d3ec24adf32b9115d4654828f23d8cf9ed Mon Sep 17 00:00:00 2001 From: mns-nordicals Date: Sat, 10 Jan 2026 16:37:34 +0100 Subject: [PATCH 10/13] Add assert_square_matrix() helper and improve test coverage Consolidate duplicate conformability checking code and add tests for inference NULL paths and LAPACK error handling. --- R/r2f-matrix-blas.R | 46 +++++-------- tests/testthat/test-matrix-internals.R | 95 ++++++++++++++++++++++++++ tests/testthat/test-matrix-lapack.R | 55 +++++++++++++++ 3 files changed, 168 insertions(+), 28 deletions(-) diff --git a/R/r2f-matrix-blas.R b/R/r2f-matrix-blas.R index c9bd93dc..97d466ca 100644 --- a/R/r2f-matrix-blas.R +++ b/R/r2f-matrix-blas.R @@ -119,6 +119,20 @@ warn_conformability_unknown <- function(left, right, context) { invisible(FALSE) } +# Assert that dimensions represent a square matrix (rows == cols). +# Throws an error if dimensions are known to be non-conformable, +# and warns if conformability cannot be verified at compile time. +assert_square_matrix <- function(rows, cols, context) { + conform <- check_conformable(rows, cols) + if (!conform$ok) { + stop(context, " requires a square matrix", call. = FALSE) + } + if (conform$unknown) { + warn_conformability_unknown(rows, cols, context) + } + invisible(TRUE) +} + # ---- BLAS emitters ---- # Check that destination dimensions match expected output dimensions. @@ -579,13 +593,7 @@ lapack_solve <- function( } a_dims <- matrix_dims(A) - conform <- check_conformable(a_dims$rows, a_dims$cols) - if (!conform$ok) { - stop(context, " requires a square matrix", call. = FALSE) - } - if (conform$unknown) { - warn_conformability_unknown(a_dims$rows, a_dims$cols, context) - } + assert_square_matrix(a_dims$rows, a_dims$cols, context) n <- a_dims$rows b_rank <- B@value@rank @@ -671,13 +679,7 @@ lapack_inverse <- function(A, scope, hoist, dest = NULL, context = "solve") { } a_dims <- matrix_dims(A) - conform <- check_conformable(a_dims$rows, a_dims$cols) - if (!conform$ok) { - stop(context, " requires a square matrix", call. = FALSE) - } - if (conform$unknown) { - warn_conformability_unknown(a_dims$rows, a_dims$cols, context) - } + assert_square_matrix(a_dims$rows, a_dims$cols, context) n <- a_dims$rows A_name <- ensure_blas_operand_name(A, hoist) @@ -731,13 +733,7 @@ lapack_chol <- function(A, scope, hoist, dest = NULL, context = "chol") { } a_dims <- matrix_dims(A) - conform <- check_conformable(a_dims$rows, a_dims$cols) - if (!conform$ok) { - stop(context, " requires a square matrix", call. = FALSE) - } - if (conform$unknown) { - warn_conformability_unknown(a_dims$rows, a_dims$cols, context) - } + assert_square_matrix(a_dims$rows, a_dims$cols, context) n <- a_dims$rows A_name <- ensure_blas_operand_name(A, hoist) @@ -792,13 +788,7 @@ lapack_chol2inv <- function( } r_dims <- matrix_dims(R) - conform <- check_conformable(r_dims$rows, r_dims$cols) - if (!conform$ok) { - stop(context, " requires a square matrix", call. = FALSE) - } - if (conform$unknown) { - warn_conformability_unknown(r_dims$rows, r_dims$cols, context) - } + assert_square_matrix(r_dims$rows, r_dims$cols, context) n <- r_dims$rows R_name <- ensure_blas_operand_name(R, hoist) diff --git a/tests/testthat/test-matrix-internals.R b/tests/testthat/test-matrix-internals.R index ddff8c8c..8ee8a8bd 100644 --- a/tests/testthat/test-matrix-internals.R +++ b/tests/testthat/test-matrix-internals.R @@ -493,3 +493,98 @@ test_that("matrix destination inference covers common shapes", { out_t <- quickr:::infer_dest_matmul(list(quote(t(A)), quote(t(B))), scope) expect_identical(out_t@dims, list(3L, 3L)) }) + +test_that("infer_dest_solve handles NULL returns", { + scope <- quickr:::new_scope(NULL) + scope@assign("A", quickr:::Variable("double", list(2L, 2L), name = "A")) + scope@assign("v", quickr:::Variable("double", list(2L), name = "v")) + scope@assign("s", quickr:::Variable("double", name = "s")) + + # NULL when a_arg is NULL (empty args with no names) + expect_null(quickr:::infer_dest_solve(list(a = NULL), scope)) + + # NULL when A is NULL + expect_null(quickr:::infer_dest_solve(list(quote(missing)), scope)) + + # NULL when A is not rank 2 + expect_null(quickr:::infer_dest_solve(list(quote(v)), scope)) + + # NULL when b is NULL but can't infer + expect_null(quickr:::infer_dest_solve(list(quote(A), quote(missing)), scope)) + + # Returns Variable for rank 1 b + out_vec <- quickr:::infer_dest_solve(list(quote(A), quote(v)), scope) + expect_identical(out_vec@dims, list(2L)) + + # NULL when b is scalar (rank 0) + expect_null(quickr:::infer_dest_solve(list(quote(A), quote(s)), scope)) +}) + +test_that("infer_size handles NULL returns", { + scope <- quickr:::new_scope(NULL) + scope@assign("n", quickr:::Variable("integer", name = "n")) + scope@assign("v", quickr:::Variable("integer", list(2L), name = "v")) + scope@assign("s", quickr:::Variable("integer", name = "s")) + + # NULL for missing args + expect_null(quickr:::infer_size(NULL, scope)) + expect_null(quickr:::infer_size(quote(expr), scope)) + + # Returns integer literal + expect_identical(quickr:::infer_size(3L, scope), 3L) + expect_identical(quickr:::infer_size(3.0, scope), 3L) + + # Returns symbol for scalar variable + expect_identical(quickr:::infer_size(quote(s), scope), quote(s)) + + # NULL for non-scalar variable + expect_null(quickr:::infer_size(quote(v), scope)) + + # NULL for non-variable symbol + expect_null(quickr:::infer_size(quote(missing), scope)) +}) + +test_that("infer_dest_diag handles NULL returns for various cases", { + scope <- quickr:::new_scope(NULL) + scope@assign("A", quickr:::Variable("double", list(2L, 3L), name = "A")) + scope@assign("v", quickr:::Variable("double", list(3L), name = "v")) + scope@assign("s", quickr:::Variable("double", name = "s")) + scope@assign("n", quickr:::Variable("integer", name = "n")) + + # NULL when x is missing and no nrow + expect_null(quickr:::infer_dest_diag(list(), scope)) + + # Returns vector when x is matrix (extracts diagonal) + out_extract <- quickr:::infer_dest_diag(list(quote(A)), scope) + expect_identical(out_extract@dims, list(2L)) + + # Returns identity matrix from integer literal + out_identity <- quickr:::infer_dest_diag(list(3L), scope) + expect_identical(out_identity@dims, list(3L, 3L)) + + # NULL when x is scalar symbol without nrow/ncol + expect_null(quickr:::infer_dest_diag(list(quote(s)), scope)) + + # Returns square matrix from vector + out_vec <- quickr:::infer_dest_diag(list(quote(v)), scope) + expect_identical(out_vec@dims, list(3L, 3L)) + + # NULL when nrow is inferred but null + expect_null( + quickr:::infer_dest_diag(list(quote(v), nrow = quote(missing)), scope) + ) +}) + +test_that("assert_square_matrix detects non-square matrices", { + expect_error( + quickr:::assert_square_matrix(2L, 3L, "test"), + "test requires a square matrix" + ) + + expect_invisible(quickr:::assert_square_matrix(2L, 2L, "test")) + + expect_warning( + quickr:::assert_square_matrix(quote(n), quote(m), "test"), + "cannot verify conformability in test" + ) +}) diff --git a/tests/testthat/test-matrix-lapack.R b/tests/testthat/test-matrix-lapack.R index b7fed7d3..6898027c 100644 --- a/tests/testthat/test-matrix-lapack.R +++ b/tests/testthat/test-matrix-lapack.R @@ -229,6 +229,61 @@ test_that("Test bad path in lapack functions", { expect_error(quick(diag_missing), "argument \"nrow\" is missing") }) +test_that("lapack functions test non-square matrix errors", { + solve_rect <- function(A, b) { + declare(type(A = double(3, 2)), type(b = double(3))) + solve(A, b) + } + + chol_rect <- function(A) { + declare(type(A = double(3, 2))) + chol(A) + } + + chol2inv_rect <- function(R) { + declare(type(R = double(3, 2))) + chol2inv(R) + } + + expect_error(quick(solve_rect), "requires a square matrix") + expect_error(quick(chol_rect), "requires a square matrix") + expect_error(quick(chol2inv_rect), "requires a square matrix") +}) + +test_that("solve with scalar RHS is rejected", { + solve_scalar_rhs <- function(A, b) { + declare(type(A = double(2, 2)), type(b = double(1))) + solve(A, b[1]) + } + + expect_error(quick(solve_scalar_rhs), "non-conformable arguments|expects a vector or matrix") +}) + +test_that("diag with various nrow/ncol combinations", { + diag_with_nrow <- function(n) { + declare(type(n = integer(1))) + diag(nrow = n) + } + + diag_with_ncol <- function(n, m) { + declare(type(n = integer(1)), type(m = integer(1))) + diag(nrow = n, ncol = m) + } + + diag_vec_nrow_ncol <- function(x, n, m) { + declare( + type(x = double(3)), + type(n = integer(1)), + type(m = integer(1)) + ) + diag(x, nrow = n, ncol = m) + } + + expect_quick_equal(diag_with_nrow, list(n = 3L)) + expect_quick_equal(diag_with_ncol, list(n = 2L, m = 3L)) + expect_quick_equal(diag_vec_nrow_ncol, list(x = c(1, 2, 3), n = 4L, m = 4L)) +}) + test_that("linear model example matches R", { my_lm <- function(X, y) { declare(type(X = double(n, k)), type(y = double(n))) From 32b44c700c1cd1bc136c334ba57e292165948021 Mon Sep 17 00:00:00 2001 From: mns-nordicals Date: Sat, 10 Jan 2026 22:08:36 +0100 Subject: [PATCH 11/13] Add more tests to get better coverage and try to simplefy some code by remove many if() with assert functions. --- R/r2f-matrix-blas.R | 232 +++++++++------- R/r2f-matrix-infer.R | 10 +- R/r2f-matrix.R | 18 +- tests/testthat/test-matrix-internals.R | 356 +++++++++++++++++++++++++ tests/testthat/test-matrix-lapack.R | 5 +- 5 files changed, 506 insertions(+), 115 deletions(-) diff --git a/R/r2f-matrix-blas.R b/R/r2f-matrix-blas.R index 97d466ca..c66481a5 100644 --- a/R/r2f-matrix-blas.R +++ b/R/r2f-matrix-blas.R @@ -2,6 +2,78 @@ # ---- shared matrix helpers (loaded early for implicit collation) ---- +# Assert hoist is a valid environment for BLAS/LAPACK helpers. +assert_hoist_env <- function(hoist) { + if (!inherits(hoist, "environment")) { + stop("internal: hoist must be a hoist environment") + } + invisible(TRUE) +} + +# Assert a Fortran value is a rank-2 matrix. +assert_rank2_matrix <- function(x, message) { + stopifnot(inherits(x, Fortran), is_string(message)) + if (x@value@rank != 2L) { + stop(message, call. = FALSE) + } + invisible(TRUE) +} + +# Assert a Fortran value is a scalar or vector. +assert_rank_leq1 <- function(x, message) { + stopifnot(inherits(x, Fortran), is_string(message)) + if (x@value@rank > 1L) { + stop(message, call. = FALSE) + } + invisible(TRUE) +} + +# Assert a Fortran value is rank 0-2. +assert_rank_leq2 <- function(x, message) { + stopifnot(inherits(x, Fortran), is_string(message)) + if (x@value@rank > 2L) { + stop(message, call. = FALSE) + } + invisible(TRUE) +} + +# Assert right-hand side rank is vector or matrix. +assert_rhs_rank <- function( + rank, + err_scalar, + err_high, + call_scalar = FALSE, + call_high = FALSE +) { + stopifnot( + is_wholenumber(rank), + is_string(err_scalar), + is_string(err_high), + is_bool(call_scalar), + is_bool(call_high) + ) + if (rank > 2L) { + stop(err_high, call. = call_high) + } + if (rank == 0L) { + stop(err_scalar, call. = call_scalar) + } + invisible(TRUE) +} + +# Assert conformability and warn on unknown. +assert_conformable_dims <- function(left, right, context, err_msg) { + stopifnot(is_string(context), is_string(err_msg)) + conform <- check_conformable(left, right) + if (!conform$ok) { + stop(err_msg, call. = FALSE) + } + if (conform$unknown) { + warn_conformability_unknown(left, right, context) + } + invisible(TRUE) +} + # Return the R symbol name if operand is a bare symbol; otherwise NULL. symbol_name_or_null <- function(x) { stopifnot(inherits(x, Fortran)) @@ -235,9 +307,7 @@ gemm <- function( dest = NULL, context = "gemm" ) { - if (!inherits(hoist, "environment")) { - stop("internal: hoist must be a hoist environment") - } + assert_hoist_env(hoist) A_name <- ensure_blas_operand_name(left, hoist) B_name <- ensure_blas_operand_name(right, hoist) @@ -281,9 +351,7 @@ gemv <- function( dest = NULL, context = "gemv" ) { - if (!inherits(hoist, "environment")) { - stop("internal: hoist must be a hoist environment") - } + assert_hoist_env(hoist) A_name <- ensure_blas_operand_name(A, hoist) x_name <- ensure_blas_operand_name(x, hoist) @@ -312,7 +380,8 @@ gemv <- function( } symmetrize_upper_to_lower <- function(target, n, hoist) { - stopifnot(is_string(target), inherits(hoist, "environment")) + stopifnot(is_string(target)) + assert_hoist_env(hoist) idx_i <- hoist$declare_tmp(mode = "integer", dims = list(1L)) idx_j <- hoist$declare_tmp(mode = "integer", dims = list(1L)) @@ -341,7 +410,8 @@ diag_length_expr <- function(nrow, ncol, context) { } zero_lower_triangle <- function(target, n, hoist) { - stopifnot(is_string(target), inherits(hoist, "environment")) + stopifnot(is_string(target)) + assert_hoist_env(hoist) idx_i <- hoist$declare_tmp(mode = "integer", dims = NULL) idx_j <- hoist$declare_tmp(mode = "integer", dims = NULL) @@ -368,9 +438,7 @@ syrk <- function( dest = NULL, context = "syrk" ) { - if (!inherits(hoist, "environment")) { - stop("internal: hoist must be a hoist environment") - } + assert_hoist_env(hoist) X_name <- ensure_blas_operand_name(X, hoist) x_dims <- matrix_dims(X) @@ -428,9 +496,7 @@ outer_mul <- function( dest = NULL, context = "outer" ) { - if (!inherits(hoist, "environment")) { - stop("internal: hoist must be a hoist environment") - } + assert_hoist_env(hoist) x <- maybe_cast_double(x) y <- maybe_cast_double(y) @@ -482,16 +548,12 @@ triangular_solve <- function( dest = NULL, context = "triangular solve" ) { - if (!inherits(hoist, "environment")) { - stop("internal: hoist must be a hoist environment") - } + assert_hoist_env(hoist) A <- maybe_cast_double(A) B <- maybe_cast_double(B) - if (A@value@rank != 2L) { - stop("triangular solve expects a matrix") - } + assert_rank2_matrix(A, "triangular solve expects a matrix") a_dims <- matrix_dims(A) conform <- check_conformable(a_dims$rows, a_dims$cols) @@ -504,29 +566,27 @@ triangular_solve <- function( n <- a_dims$rows b_rank <- B@value@rank - if (b_rank > 2L) { - stop("triangular solve only supports vector or matrix right-hand sides") - } - if (b_rank == 0L) { - stop("triangular solve expects a vector or matrix right-hand side") - } else if (b_rank == 1L) { + assert_rhs_rank( + b_rank, + err_scalar = "triangular solve expects a vector or matrix right-hand side", + err_high = "triangular solve only supports vector or matrix right-hand sides" + ) + if (b_rank == 1L) { b_len <- dim_or_one(B, 1L) - conform <- check_conformable(n, b_len) - if (!conform$ok) { - stop("non-conformable arguments in triangular solve", call. = FALSE) - } - if (conform$unknown) { - warn_conformability_unknown(n, b_len, "triangular solve") - } + assert_conformable_dims( + n, + b_len, + context = "triangular solve", + err_msg = "non-conformable arguments in triangular solve" + ) } else { b_rows <- dim_or_one(B, 1L) - conform <- check_conformable(n, b_rows) - if (!conform$ok) { - stop("non-conformable arguments in triangular solve", call. = FALSE) - } - if (conform$unknown) { - warn_conformability_unknown(n, b_rows, "triangular solve") - } + assert_conformable_dims( + n, + b_rows, + context = "triangular solve", + err_msg = "non-conformable arguments in triangular solve" + ) } A_name <- ensure_blas_operand_name(A, hoist) @@ -581,51 +641,45 @@ lapack_solve <- function( dest = NULL, context = "solve" ) { - if (!inherits(hoist, "environment")) { - stop("internal: hoist must be a hoist environment") - } + assert_hoist_env(hoist) A <- maybe_cast_double(A) B <- maybe_cast_double(B) - if (A@value@rank != 2L) { - stop(context, " expects a matrix for `a`", call. = FALSE) - } + assert_rank2_matrix(A, paste0(context, " expects a matrix for `a`")) a_dims <- matrix_dims(A) assert_square_matrix(a_dims$rows, a_dims$cols, context) n <- a_dims$rows b_rank <- B@value@rank - if (b_rank > 2L) { - stop( + assert_rhs_rank( + b_rank, + err_scalar = paste0(context, " expects a vector or matrix right-hand side"), + err_high = paste0( context, - " only supports vector or matrix right-hand sides", - call. = FALSE - ) - } - if (b_rank == 0L) { - stop(context, " expects a vector or matrix right-hand side", call. = FALSE) - } + " only supports vector or matrix right-hand sides" + ), + call_scalar = FALSE, + call_high = FALSE + ) if (b_rank == 1L) { b_len <- dim_or_one(B, 1L) - conform <- check_conformable(n, b_len) - if (!conform$ok) { - stop("non-conformable arguments in ", context, call. = FALSE) - } - if (conform$unknown) { - warn_conformability_unknown(n, b_len, context) - } + assert_conformable_dims( + n, + b_len, + context = context, + err_msg = paste0("non-conformable arguments in ", context) + ) } else { b_rows <- dim_or_one(B, 1L) - conform <- check_conformable(n, b_rows) - if (!conform$ok) { - stop("non-conformable arguments in ", context, call. = FALSE) - } - if (conform$unknown) { - warn_conformability_unknown(n, b_rows, context) - } + assert_conformable_dims( + n, + b_rows, + context = context, + err_msg = paste0("non-conformable arguments in ", context) + ) } A_name <- ensure_blas_operand_name(A, hoist) @@ -669,14 +723,10 @@ lapack_solve <- function( } lapack_inverse <- function(A, scope, hoist, dest = NULL, context = "solve") { - if (!inherits(hoist, "environment")) { - stop("internal: hoist must be a hoist environment") - } + assert_hoist_env(hoist) A <- maybe_cast_double(A) - if (A@value@rank != 2L) { - stop(context, " expects a matrix for `a`", call. = FALSE) - } + assert_rank2_matrix(A, paste0(context, " expects a matrix for `a`")) a_dims <- matrix_dims(A) assert_square_matrix(a_dims$rows, a_dims$cols, context) @@ -723,14 +773,10 @@ lapack_inverse <- function(A, scope, hoist, dest = NULL, context = "solve") { } lapack_chol <- function(A, scope, hoist, dest = NULL, context = "chol") { - if (!inherits(hoist, "environment")) { - stop("internal: hoist must be a hoist environment") - } + assert_hoist_env(hoist) A <- maybe_cast_double(A) - if (A@value@rank != 2L) { - stop(context, " expects a matrix", call. = FALSE) - } + assert_rank2_matrix(A, paste0(context, " expects a matrix")) a_dims <- matrix_dims(A) assert_square_matrix(a_dims$rows, a_dims$cols, context) @@ -778,14 +824,10 @@ lapack_chol2inv <- function( dest = NULL, context = "chol2inv" ) { - if (!inherits(hoist, "environment")) { - stop("internal: hoist must be a hoist environment") - } + assert_hoist_env(hoist) R <- maybe_cast_double(R) - if (R@value@rank != 2L) { - stop(context, " expects a matrix", call. = FALSE) - } + assert_rank2_matrix(R, paste0(context, " expects a matrix")) r_dims <- matrix_dims(R) assert_square_matrix(r_dims$rows, r_dims$cols, context) @@ -827,14 +869,10 @@ lapack_chol2inv <- function( } diag_extract <- function(x, scope, hoist, dest = NULL, context = "diag") { - if (!inherits(hoist, "environment")) { - stop("internal: hoist must be a hoist environment") - } + assert_hoist_env(hoist) x <- maybe_cast_double(x) - if (x@value@rank != 2L) { - stop(context, " expects a matrix input", call. = FALSE) - } + assert_rank2_matrix(x, paste0(context, " expects a matrix input")) x_dims <- matrix_dims(x) diag_len <- diag_length_expr(x_dims$rows, x_dims$cols, context) @@ -882,14 +920,10 @@ diag_matrix <- function( dest = NULL, context = "diag" ) { - if (!inherits(hoist, "environment")) { - stop("internal: hoist must be a hoist environment") - } + assert_hoist_env(hoist) x <- maybe_cast_double(x) - if (x@value@rank > 1L) { - stop(context, " expects a vector or scalar input", call. = FALSE) - } + assert_rank_leq1(x, paste0(context, " expects a vector or scalar input")) diag_len <- diag_length_expr(nrow, ncol, context) x_scalar <- passes_as_scalar(x@value) diff --git a/R/r2f-matrix-infer.R b/R/r2f-matrix-infer.R index 026d0748..13a68fa5 100644 --- a/R/r2f-matrix-infer.R +++ b/R/r2f-matrix-infer.R @@ -328,7 +328,7 @@ infer_dest_diag <- function(args, scope) { return(NULL) } - # Case: x is a vector or scalar, construct diagonal matrix + # Case: x is a vector or scalar, construct diagonal matrix if (!is.null(x) && x@rank <= 1L) { if (has_nrow || has_ncol) { nrow <- if (has_nrow) infer_size(nrow_arg, scope) else NULL @@ -336,8 +336,12 @@ infer_dest_diag <- function(args, scope) { if (is.null(nrow) && is.null(ncol)) { return(NULL) } - if (is.null(nrow)) nrow <- ncol - if (is.null(ncol)) ncol <- nrow + if (is.null(nrow)) { + nrow <- ncol + } + if (is.null(ncol)) { + ncol <- nrow + } return(Variable("double", list(nrow, ncol))) } # No nrow/ncol: square matrix from vector length diff --git a/R/r2f-matrix.R b/R/r2f-matrix.R index 36a722f8..6d07928c 100644 --- a/R/r2f-matrix.R +++ b/R/r2f-matrix.R @@ -340,9 +340,7 @@ register_r2f_handler( if (is.null(val@value) || is.null(val@value@mode)) { stop(context, " inputs must have a value", call. = FALSE) } - if (val@value@rank > 2L) { - stop(context, " only supports rank 0-2 inputs", call. = FALSE) - } + assert_rank_leq2(val, paste0(context, " only supports rank 0-2 inputs")) } mode <- bind_output_mode(values, context) @@ -398,9 +396,7 @@ register_r2f_handler( if (is.null(val@value) || is.null(val@value@mode)) { stop(context, " inputs must have a value", call. = FALSE) } - if (val@value@rank > 2L) { - stop(context, " only supports rank 0-2 inputs", call. = FALSE) - } + assert_rank_leq2(val, paste0(context, " only supports rank 0-2 inputs")) } mode <- bind_output_mode(values, context) @@ -709,12 +705,10 @@ register_r2f_handler( )) } - if (x_rank > 2L) { - stop( - "diag() only supports scalar, vector, or matrix inputs", - call. = FALSE - ) - } + assert_rank_leq2( + x, + "diag() only supports scalar, vector, or matrix inputs" + ) if (!has_nrow && !has_ncol && x_rank == 0L) { nrow <- r2size(x_arg, scope) diff --git a/tests/testthat/test-matrix-internals.R b/tests/testthat/test-matrix-internals.R index 8ee8a8bd..c1e19869 100644 --- a/tests/testthat/test-matrix-internals.R +++ b/tests/testthat/test-matrix-internals.R @@ -238,6 +238,10 @@ test_that("maybe_reshape_vector_matrix reshapes vectors for singleton matrices", reshaped <- quickr:::maybe_reshape_vector_matrix(vec, mat_scalar) expect_identical(reshaped$left@value@rank, 1L) expect_identical(reshaped$right@value@rank, 0L) + + reshaped <- quickr:::maybe_reshape_vector_matrix(mat_scalar, vec) + expect_identical(reshaped$left@value@rank, 0L) + expect_identical(reshaped$right@value@rank, 1L) }) test_that("indexing matrix expressions can hoist temporaries", { @@ -273,6 +277,117 @@ test_that("unwrap_transpose_arg handles scalar inputs and rank errors", { ) }) +test_that("symbol_name_or_null recognizes bare Fortran names", { + val <- quickr:::Variable("double") + A <- quickr:::Fortran("A", val, r = NULL) + expect_identical(quickr:::symbol_name_or_null(A), "A") +}) + +test_that("assert_hoist_env validates hoist environments", { + expect_error( + quickr:::assert_hoist_env(NULL), + "hoist must be a hoist environment" + ) + expect_invisible(quickr:::assert_hoist_env(new.env(parent = emptyenv()))) +}) + +test_that("rank assertion helpers validate matrix and vector inputs", { + mat <- quickr:::Fortran( + "A", + quickr:::Variable("double", list(2L, 2L), name = "A") + ) + vec <- quickr:::Fortran( + "v", + quickr:::Variable("double", list(2L), name = "v") + ) + arr <- quickr:::Fortran( + "arr", + quickr:::Variable("double", list(2L, 2L, 2L), name = "arr") + ) + + expect_invisible(quickr:::assert_rank2_matrix(mat, "matrix needed")) + expect_error( + quickr:::assert_rank2_matrix(vec, "matrix needed"), + "matrix needed" + ) + + expect_invisible(quickr:::assert_rank_leq1(vec, "vector needed")) + expect_error( + quickr:::assert_rank_leq1(mat, "vector needed"), + "vector needed" + ) + + expect_invisible(quickr:::assert_rank_leq2(mat, "rank 0-2 needed")) + expect_error( + quickr:::assert_rank_leq2(arr, "rank 0-2 needed"), + "rank 0-2 needed" + ) +}) + +test_that("rhs and conformability helpers validate inputs", { + expect_error( + quickr:::assert_rhs_rank( + 0L, + err_scalar = "scalar rhs", + err_high = "high rhs" + ), + "scalar rhs" + ) + expect_error( + quickr:::assert_rhs_rank( + 3L, + err_scalar = "scalar rhs", + err_high = "high rhs" + ), + "high rhs" + ) + expect_invisible( + quickr:::assert_rhs_rank( + 1L, + err_scalar = "scalar rhs", + err_high = "high rhs" + ) + ) + + expect_invisible( + quickr:::assert_conformable_dims( + 2L, + 2L, + context = "test", + err_msg = "non-conformable" + ) + ) + expect_error( + quickr:::assert_conformable_dims( + 2L, + 3L, + context = "test", + err_msg = "non-conformable" + ), + "non-conformable" + ) + expect_warning( + quickr:::assert_conformable_dims( + quote(n), + quote(m), + context = "test", + err_msg = "non-conformable" + ), + "cannot verify conformability in test" + ) +}) + +test_that("diag_length_expr requires known dimensions", { + expect_error( + quickr:::diag_length_expr(NA, 2L, "diag"), + "requires known dimensions" + ) + expect_error( + quickr:::diag_length_expr(2L, NA, "diag"), + "requires known dimensions" + ) +}) + test_that("blas helpers require a hoist environment", { scope <- new.env(parent = emptyenv()) var_mat <- quickr:::Variable("double", list(1L, 1L), name = "A") @@ -332,6 +447,57 @@ test_that("blas helpers require a hoist environment", { ), "hoist must be a hoist environment" ) + expect_error( + quickr:::lapack_solve( + A, + x, + scope = scope, + hoist = NULL + ), + "hoist must be a hoist environment" + ) + expect_error( + quickr:::lapack_inverse( + A, + scope = scope, + hoist = NULL + ), + "hoist must be a hoist environment" + ) + expect_error( + quickr:::lapack_chol( + A, + scope = scope, + hoist = NULL + ), + "hoist must be a hoist environment" + ) + expect_error( + quickr:::lapack_chol2inv( + A, + scope = scope, + hoist = NULL + ), + "hoist must be a hoist environment" + ) + expect_error( + quickr:::diag_extract( + A, + scope = scope, + hoist = NULL + ), + "hoist must be a hoist environment" + ) + expect_error( + quickr:::diag_matrix( + x, + nrow = 1L, + ncol = 1L, + scope = scope, + hoist = NULL + ), + "hoist must be a hoist environment" + ) }) test_that("blas helpers allocate temporaries when outputs are not reused", { @@ -429,6 +595,196 @@ test_that("triangular_solve rejects scalar right-hand sides", { ) }) +test_that("lapack_solve validates right-hand side and conformability", { + scope <- quickr:::new_scope(NULL) + hoist <- quickr:::new_hoist(scope) + + A <- quickr:::Fortran( + "A", + quickr:::Variable("double", list(2L, 2L), name = "A"), + r = quote(A) + ) + b_scalar <- quickr:::Fortran("b", quickr:::Variable("double"), r = quote(b)) + b_vec <- quickr:::Fortran( + "b", + quickr:::Variable("double", list(2L), name = "b"), + r = quote(b) + ) + b_bad <- quickr:::Fortran( + "b", + quickr:::Variable("double", list(3L), name = "b"), + r = quote(b) + ) + + expect_error( + quickr:::lapack_solve( + A, + b_scalar, + scope = scope, + hoist = hoist, + context = "solve" + ), + "expects a vector or matrix right-hand side" + ) + expect_error( + quickr:::lapack_solve( + A, + b_bad, + scope = scope, + hoist = hoist, + context = "solve" + ), + "non-conformable arguments in solve" + ) + out <- quickr:::lapack_solve( + A, + b_vec, + scope = scope, + hoist = hoist, + context = "solve" + ) + expect_identical(out@value@dims, list(2L)) +}) + +test_that("lapack_solve warns on unknown conformability", { + scope <- quickr:::new_scope(NULL) + hoist <- quickr:::new_hoist(scope) + + A <- quickr:::Fortran( + "A", + quickr:::Variable("double", list(quote(n), quote(n)), name = "A"), + r = quote(A) + ) + b_vec <- quickr:::Fortran( + "b", + quickr:::Variable("double", list(quote(m)), name = "b"), + r = quote(b) + ) + + expect_warning( + quickr:::lapack_solve( + A, + b_vec, + scope = scope, + hoist = hoist, + context = "solve" + ), + "cannot verify conformability in solve" + ) +}) + +test_that("lapack_inverse and diag helpers allocate temporaries", { + scope <- quickr:::new_scope(NULL) + hoist <- quickr:::new_hoist(scope) + + A <- quickr:::Fortran( + "A", + quickr:::Variable("double", list(2L, 2L), name = "A"), + r = quote(A) + ) + v <- quickr:::Fortran( + "v", + quickr:::Variable("double", list(3L), name = "v"), + r = quote(v) + ) + + expect_error( + quickr:::lapack_inverse(v, scope = scope, hoist = hoist, context = "solve"), + "expects a matrix for `a`" + ) + + inv <- quickr:::lapack_inverse(A, scope = scope, hoist = hoist) + expect_identical(inv@value@dims, list(2L, 2L)) + + diag_out <- quickr:::diag_extract(A, scope = scope, hoist = hoist) + expect_identical(diag_out@value@dims, list(2L)) + + mat_out <- quickr:::diag_matrix( + v, + nrow = 3L, + ncol = 3L, + scope = scope, + hoist = hoist + ) + expect_identical(mat_out@value@dims, list(3L, 3L)) +}) + +test_that("diag helpers validate input ranks", { + scope <- quickr:::new_scope(NULL) + hoist <- quickr:::new_hoist(scope) + + mat <- quickr:::Fortran( + "A", + quickr:::Variable("double", list(2L, 2L), name = "A"), + r = quote(A) + ) + vec <- quickr:::Fortran( + "v", + quickr:::Variable("double", list(2L), name = "v"), + r = quote(v) + ) + + expect_error( + quickr:::diag_extract(vec, scope = scope, hoist = hoist), + "expects a matrix input" + ) + expect_error( + quickr:::diag_matrix( + mat, + nrow = 2L, + ncol = 2L, + scope = scope, + hoist = hoist + ), + "expects a vector or scalar input" + ) +}) + +test_that("matrix inference covers triangular, solve, and diag variants", { + scope <- quickr:::new_scope(NULL) + scope@assign("A", quickr:::Variable("double", list(2L, 2L), name = "A")) + scope@assign("B", quickr:::Variable("double", list(2L, 3L), name = "B")) + scope@assign("L", quickr:::Variable("double", list(2L, 2L), name = "L")) + scope@assign("b", quickr:::Variable("double", list(2L), name = "b")) + scope@assign("n", quickr:::Variable("integer", name = "n")) + scope@assign("m", quickr:::Variable("integer", name = "m")) + scope@assign("v", quickr:::Variable("double", list(3L), name = "v")) + + expect_null(quickr:::infer_dest_triangular(list(quote(L)), scope)) + out_tri <- quickr:::infer_dest_triangular( + list(l = quote(L), x = quote(b)), + scope + ) + expect_identical(out_tri@dims, list(2L)) + + out_solve <- quickr:::infer_dest_solve(list(quote(A)), scope) + expect_identical(out_solve@dims, list(2L, 2L)) + + out_solve_mat <- quickr:::infer_dest_solve(list(quote(A), quote(B)), scope) + expect_identical(out_solve_mat@dims, list(2L, 3L)) + + out_chol <- quickr:::infer_dest_chol(list(quote(A)), scope) + expect_identical(out_chol@dims, list(2L, 2L)) + + out_chol2 <- quickr:::infer_dest_chol2inv(list(quote(A)), scope) + expect_identical(out_chol2@dims, list(2L, 2L)) + + out_diag <- quickr:::infer_dest_diag( + list(quote(v), quote(n), quote(m)), + scope + ) + expect_identical(out_diag@dims, list(quote(n), quote(m))) + + out_diag_named <- quickr:::infer_dest_diag( + list(x = quote(v), nrow = quote(n), ncol = quote(m)), + scope + ) + expect_identical(out_diag_named@dims, list(quote(n), quote(m))) + + out_diag_nrow <- quickr:::infer_dest_diag(list(nrow = quote(n)), scope) + expect_identical(out_diag_nrow@dims, list(quote(n), quote(n))) +}) + test_that("matrix argument inference handles transposes and ranks", { scope <- quickr:::new_scope(NULL) scope@assign("A", quickr:::Variable("double", list(2L, 3L), name = "A")) diff --git a/tests/testthat/test-matrix-lapack.R b/tests/testthat/test-matrix-lapack.R index 6898027c..a2f81301 100644 --- a/tests/testthat/test-matrix-lapack.R +++ b/tests/testthat/test-matrix-lapack.R @@ -256,7 +256,10 @@ test_that("solve with scalar RHS is rejected", { solve(A, b[1]) } - expect_error(quick(solve_scalar_rhs), "non-conformable arguments|expects a vector or matrix") + expect_error( + quick(solve_scalar_rhs), + "non-conformable arguments|expects a vector or matrix" + ) }) test_that("diag with various nrow/ncol combinations", { From 4dfa4a2e56726a3e3d201099377c9cf8edb222fa Mon Sep 17 00:00:00 2001 From: mns-nordicals Date: Sun, 11 Jan 2026 12:13:20 +0100 Subject: [PATCH 12/13] Added test case for binary operator and a 1 by 1 matrix. Test uses supress warning in order to not fail tests --- tests/testthat/test-matrix.R | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tests/testthat/test-matrix.R b/tests/testthat/test-matrix.R index 4c8b76a6..b64ae81c 100644 --- a/tests/testthat/test-matrix.R +++ b/tests/testthat/test-matrix.R @@ -140,6 +140,28 @@ test_that("1x1 matrix preserves matrix result with length-1 vector", { ) }) +test_that("1x1 matrix with length-n vector yields a vector", { + fn <- function(vec, mat_1_1) { + declare( + type(vec = double(n)), + type(mat_1_1 = double(1, 1)) + ) + a <- vec + mat_1_1 + b <- mat_1_1 + vec + out <- list(a = a, b = b) + out + } + + ## Note: base R emits a warning: + ## Recycling array of length 1 in vector-array arithmetic is deprecated + ## suppressWarnings is used to pass test as this path may arrise in code + ## e.g crossprod(1:4) or other matrix operation that gives 1 by 1 matrix + suppressWarnings(expect_quick_identical( + fn, + list(c(1,2,3), matrix(1, nrow = 1L, ncol = 1L)) + )) +}) + test_that("indexing function like transposed expressions hoists temporaries that can be accessed", { fn <- function(x) { declare(type(x = double(5, 5))) From 5cbad69f0a27c36370d3989533b77c0c0894b592 Mon Sep 17 00:00:00 2001 From: mns-nordicals Date: Sun, 11 Jan 2026 19:24:49 +0100 Subject: [PATCH 13/13] Updated new and readme --- NEWS.md | 4 +- README.Rmd | 84 +++ README.md | 734 ++++++++++++++++++++++- man/figures/README-unnamed-chunk-3-1.png | Bin 25859 -> 36840 bytes man/figures/README-unnamed-chunk-6-1.png | Bin 28025 -> 43965 bytes man/figures/README-unnamed-chunk-7-1.png | Bin 25841 -> 33954 bytes man/figures/README-unnamed-chunk-8-1.png | Bin 27799 -> 38753 bytes man/figures/README-unnamed-chunk-9-1.png | Bin 43386 -> 80822 bytes 8 files changed, 793 insertions(+), 29 deletions(-) diff --git a/NEWS.md b/NEWS.md index 0a44a795..19d3c189 100644 --- a/NEWS.md +++ b/NEWS.md @@ -2,9 +2,9 @@ - Added initial matrix/linear algebra handler support from base R, using the same BLAS/LAPACK as R: `%*%`, `t()`, `crossprod()`, `tcrossprod()`, - `outer()` (with `FUN="*"`), `%o%`, `forwardsolve()`, and `backsolve()`. + `outer()` (with `FUN="*"`), `%o%`, `forwardsolve()`, `backsolve()`, `diag()`, `t()`, `chol()`, `chol2inv()` and `solve()` - The plan is to add more functions in the future (#77 @mns-nordicals) + The plan is to add more functions in the future (#77, #79 @mns-nordicals) - Added support for `cbind()` and `rbind()` for rank-0/1/2 inputs, with scalar recycling only and strict length checks for non-scalar inputs. diff --git a/README.Rmd b/README.Rmd index 45266d2b..445db7b9 100644 --- a/README.Rmd +++ b/README.Rmd @@ -447,6 +447,90 @@ For example: my_fun <- quick(name = "my_fun", function(x) ....) ``` +## Basic support for matrix operations +We have implemented a subset of matrix operations from base R. When you do a matrix multiplication like `A %*% B`, R calls BLAS/LAPACK functions linked to your R build. `quickr` is linked to the same BLAS/LAPACK implementation, so you can expect the same results and slightly faster computation due to lower overhead. There are multiple BLAS/LAPACK implementations, and performance therefore depends on what you have installed. + +To illustrate the performance of matrix operations, we do a linear regression using the normal equation, which is fast but not the most numerically stable method. We compare with `RcppArmadillo`, which is a popular library for matrix operations. The `RcppArmadillo` implementation aims to match our R implementation. + +```{r} +lm <- function(X, y) { + declare( + type(X = double(n, k)), + type(y = double(n)) + ) + + df <- nrow(X) - ncol(X) + + XtX <- crossprod(X) + Xty <- crossprod(X, y) + coef <- solve(XtX, Xty) + fit_val <- X %*% coef + resid <- y - fit_val + s2 <- crossprod(resid)[1] + s2 <- s2 / df + + U <- chol(XtX) + XtX_inv <- chol2inv(U) + std_err <- sqrt(diag(XtX_inv) * s2) + + list( + coefficients = coef, + stderr = std_err, + df.residual = df, + fitted_values = fit_val, + residuals = resid + ) +} + +qlm <- quick(lm) + +Rcpp::sourceCpp( + code = '#include +// [[Rcpp::depends(RcppArmadillo)]] + +// [[Rcpp::export]] +Rcpp::List RcppLm(const arma::mat& X, const arma::colvec& y) { + int n = X.n_rows; + int k = X.n_cols; + int df = n - k; + + arma::mat XtX = arma::trans(X) * X; + arma::colvec Xty = arma::trans(X) * y; + arma::colvec coef = arma::solve(XtX, Xty); + arma::colvec fit_val = X * coef; + arma::colvec resid = y - fit_val; + double s2 = arma::dot(resid, resid); + s2 = s2 / df; + + arma::mat U = arma::chol(XtX); + arma::mat XtX_inv = arma::inv(arma::trimatu(U)) * arma::trans(arma::inv(arma::trimatu(U))); + arma::colvec std_err = arma::sqrt(arma::diagvec(XtX_inv) * s2); + + return Rcpp::List::create( + Rcpp::Named("coefficients") = coef, + Rcpp::Named("stderr") = std_err, + Rcpp::Named("df.residual") = df, + Rcpp::Named("fitted_values") = fit_val, + Rcpp::Named("residuals") = resid + ); +}' +) + +beta <- c(0.5, 1.0, -2.0, 10, 5) +X <- cbind(1, matrix(rnorm(3 * 10^6), ncol = 4)) +y <- as.vector(X %*% beta + rnorm(nrow(X), sd = 2)) + +timings <- bench::mark( + r = lm(X, y), + quickr = qlm(X, y), + RcppArmadillo = RcppLm(X, y), + check = FALSE, # stderr is a vector in R and matrix in RcppArmadillo + min_iterations = 30 +) +timings + +``` + ## Installation You can install quickr from CRAN with: diff --git a/README.md b/README.md index d502b294..539da268 100644 --- a/README.md +++ b/README.md @@ -140,13 +140,13 @@ timings #> # A tibble: 3 × 6 #> expression min median `itr/sec` mem_alloc `gc/sec` #> -#> 1 r 489ms 489.79ms 2.04 847KB 3.06 -#> 2 quickr 914µs 1.07ms 934. 782KB 15.3 -#> 3 c 920µs 1.07ms 927. 782KB 15.7 +#> 1 r 1.21s 1.21s 0.825 857KB 0.825 +#> 2 quickr 1.95ms 2.26ms 446. 782KB 7.51 +#> 3 c 4.21ms 4.52ms 223. 782KB 3.62 plot(timings) + bench::scale_x_bench_time(base = NULL) ``` - + In the case of `convolve()`, `quick()` returns a function approximately *200* times quicker, giving similar performance to the C function. @@ -165,18 +165,25 @@ In the case of `convolve()`, `quick()` returns a function approximately - #> [1] - : ! != ( [ [<- - #> [8] [<<- { * / & && %/% - #> [15] %% ^ + < <- <<- <= - #> [22] = == > >= | || Arg - #> [29] Conj Fortran Im Mod Re abs acos - #> [36] array as.double asin atan break c cat - #> [43] cbind ceiling character cos declare dim double - #> [50] exp floor for if ifelse integer length - #> [57] log log10 logical matrix max min ncol - #> [64] next nrow numeric print prod raw repeat - #> [71] runif seq seq_along seq_len sin sqrt sum - #> [78] tan which.max which.min while + #> [1] - : ! != ( + #> [6] [ [<- [<<- { * + #> [11] / & && %*% %/% + #> [16] %% %o% ^ + < + #> [21] <- <<- <= = == + #> [26] > >= | || Arg + #> [31] Conj Fortran Im Mod Re + #> [36] abs acos array as.double asin + #> [41] atan backsolve break c cat + #> [46] cbind ceiling character chol chol2inv + #> [51] cos crossprod declare diag dim + #> [56] double exp floor for forwardsolve + #> [61] if ifelse integer length log + #> [66] log10 logical matrix max min + #> [71] ncol next nrow numeric outer + #> [76] print prod raw rbind repeat + #> [81] runif seq seq_along seq_len sin + #> [86] solve sqrt sum t tan + #> [91] tcrossprod which.max which.min while Many of these restrictions are expected to be relaxed as the project matures. However, quickr is intended primarily for high-performance @@ -285,12 +292,12 @@ timings #> # A tibble: 2 × 6 #> expression min median `itr/sec` mem_alloc `gc/sec` #> -#> 1 slow_viterbi 62.36µs 71.3µs 13731. 178KB 34.6 -#> 2 quick_viterbi 1.76µs 2.05µs 468885. 0B 0 +#> 1 slow_viterbi 194.62µs 205.5µs 4700. 178KB 10.8 +#> 2 quick_viterbi 2.35µs 2.5µs 368999. 0B 36.9 plot(timings) ``` - + ### Diffusion simulation @@ -370,12 +377,12 @@ summary(timings, relative = TRUE) #> # A tibble: 2 × 6 #> expression min median `itr/sec` mem_alloc `gc/sec` #> -#> 1 diffuse_heat 91.8 87.2 1 515. Inf -#> 2 quick_diffuse_heat 1 1 87.3 1 NaN +#> 1 diffuse_heat 220. 216. 1 515. Inf +#> 2 quick_diffuse_heat 1 1 214. 1 NaN plot(timings) ``` - + ### Rolling Mean @@ -417,15 +424,15 @@ timings #> # A tibble: 3 × 6 #> expression min median `itr/sec` mem_alloc `gc/sec` #> -#> 1 r 64.68ms 74.95ms 9.90 124.31MB 21.8 -#> 2 rcpp 5.92ms 6.33ms 154. 4.44MB 1.98 -#> 3 quickr 2.15ms 2.42ms 414. 781.35KB 4.00 +#> 1 r 176.23ms 180.72ms 5.27 124.31MB 19.3 +#> 2 rcpp 26.12ms 26.75ms 37.3 4.44MB 0 +#> 3 quickr 6.22ms 6.46ms 149. 781.35KB 3.97 timings$expression <- factor(names(timings$expression), rev(names(timings$expression))) plot(timings) + bench::scale_x_bench_time(base = NULL) ``` - + ## Parallelize loops with OpenMP @@ -478,7 +485,7 @@ r |> scale_x_log10() + bench::scale_y_bench_time() ``` - + quickr does not set OpenMP thread counts. To control threads, set `OMP_NUM_THREADS` (and optionally `OMP_THREAD_LIMIT` or `OMP_DYNAMIC`) @@ -499,6 +506,679 @@ example: my_fun <- quick(name = "my_fun", function(x) ....) ``` +## Basic support for matrix operations + +We have implemented a subset of matrix operations from base R. When you +do a matrix multiplication like `A %*% B`, R calls BLAS/LAPACK functions +linked to your R build. `quickr` is linked to the same BLAS/LAPACK +implementation, so you can expect the same results and slightly faster +computation due to lower overhead. There are multiple BLAS/LAPACK +implementations, and performance therefore depends on what you have +installed. + +To illustrate the performance of matrix operations, we do a linear +regression using the normal equation, which is fast but not the most +numerically stable method. We compare with `RcppArmadillo`, which is a +popular library for matrix operations. The `RcppArmadillo` +implementation aims to match our R implementation. + +``` r +lm <- function(X, y) { + declare( + type(X = double(n, k)), + type(y = double(n)) + ) + + df <- nrow(X) - ncol(X) + + XtX <- crossprod(X) + Xty <- crossprod(X, y) + coef <- solve(XtX, Xty) + fit_val <- X %*% coef + resid <- y - fit_val + s2 <- crossprod(resid) + s2 <- s2 / df + + U <- chol(XtX) + XtX_inv <- chol2inv(U) + std_err <- sqrt(diag(XtX_inv) * s2) + + list( + coefficients = coef, + stderr = std_err, + df.residual = df, + fitted_values = fit_val, + residuals = resid + ) +} + +qlm <- quick(lm) + +Rcpp::sourceCpp( + code = '#include +// [[Rcpp::depends(RcppArmadillo)]] + +// [[Rcpp::export]] +Rcpp::List RcppLm(const arma::mat& X, const arma::colvec& y) { + int n = X.n_rows; + int k = X.n_cols; + int df = n - k; + + arma::mat XtX = arma::trans(X) * X; + arma::colvec Xty = arma::trans(X) * y; + arma::colvec coef = arma::solve(XtX, Xty); + arma::colvec fit_val = X * coef; + arma::colvec resid = y - fit_val; + double s2 = arma::dot(resid, resid); + s2 = s2 / df; + + arma::mat U = arma::chol(XtX); + arma::mat XtX_inv = arma::inv(arma::trimatu(U)) * arma::trans(arma::inv(arma::trimatu(U))); + arma::colvec std_err = arma::sqrt(arma::diagvec(XtX_inv) * s2); + + return Rcpp::List::create( + Rcpp::Named("coefficients") = coef, + Rcpp::Named("stderr") = std_err, + Rcpp::Named("df.residual") = df, + Rcpp::Named("fitted_values") = fit_val, + Rcpp::Named("residuals") = resid + ); +}' +) + +beta <- c(0.5, 1.0, -2.0, 10) +X <- cbind(1, matrix(rnorm(3 * 10^5), ncol = 3)) +y <- as.vector(X %*% beta + rnorm(nrow(X), sd = 2)) + +timings <- bench::mark( + r = lm(X, y), + quickr = qlm(X, y), + RcppArmadillo = RcppLm(X, y), + check = FALSE # stderr is a vector in R and matrix in RcppArmadillo +) +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +#> Warning in diag(XtX_inv) * s2: Recycling array of length 1 in vector-array arithmetic is deprecated. +#> Use c() or as.vector() instead. +timings +#> # A tibble: 3 × 6 +#> expression min median `itr/sec` mem_alloc `gc/sec` +#> +#> 1 r 1.13ms 1.69ms 572. 1.66MB 0 +#> 2 quickr 1.28ms 1.31ms 751. 1.53MB 3.06 +#> 3 RcppArmadillo 702.96µs 727.57µs 1159. 1.53MB 0 +``` + ## Installation You can install quickr from CRAN with: diff --git a/man/figures/README-unnamed-chunk-3-1.png b/man/figures/README-unnamed-chunk-3-1.png index 698459391753b6ef606909361a0fbe28c2118c9f..5a2b4a9ddd35d4b34e67b9a381d6d4349a4a0ce4 100644 GIT binary patch literal 36840 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 diff --git a/man/figures/README-unnamed-chunk-6-1.png b/man/figures/README-unnamed-chunk-6-1.png index 7ecbb3fdb95cd1a78db8ce8eab90aa521321aeef..22c18a66802ad14bebeedc1f1a99077706898152 100644 GIT binary patch literal 43965 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 literal 28025 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 diff --git a/man/figures/README-unnamed-chunk-7-1.png b/man/figures/README-unnamed-chunk-7-1.png index b5dc31964dc3aa439b0c9f986d3a27c6d69b79bd..49700f5afb55e3ed481a59ba738efe18aad15392 100644 GIT binary patch literal 33954 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 literal 25841 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 $+mdgC6}>uj>|m) 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 P0SG)@{an^LB{Ts5K9AK2 diff --git a/man/figures/README-unnamed-chunk-8-1.png b/man/figures/README-unnamed-chunk-8-1.png index e9ea14e037265c29842d2859bfd4c8d6caf2b3a1..a7df5a4f61d3c0f431bb33b5fac30afd6b4173fb 100644 GIT binary patch literal 38753 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

g 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৙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 literal 43386 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

;*pi{QD_PA9I|lv)Nz=mo6Hg6kYg8>MeqF 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