From 5440b49cd67f6e4857a474127b77ac5d0f92cab8 Mon Sep 17 00:00:00 2001 From: chainsawriot Date: Sun, 12 Feb 2023 23:03:12 +0100 Subject: [PATCH 1/3] rename the functional part of the package to rang ref #35 --- DESCRIPTION | 2 +- NAMESPACE | 10 +- R/installation.R | 140 +++++++++--------- R/resolve.R | 40 ++--- man/dockerize.Rd | 18 +-- man/{export_granlist.Rd => export_rang.Rd} | 16 +- man/resolve.Rd | 2 +- tests/testdata/gran_6.RDS | Bin 4467 -> 0 bytes tests/testdata/gran_mixture.RDS | Bin 557 -> 0 bytes tests/testdata/gran_ok.RDS | Bin 897 -> 0 bytes tests/testdata/gran_rio_old.RDS | Bin 1073 -> 0 bytes tests/testdata/gran_unresolved.RDS | Bin 311 -> 0 bytes tests/testdata/graph.RDS | Bin 10605 -> 10610 bytes tests/testdata/issue21.RDS | Bin 39433 -> 39435 bytes tests/testdata/issue21_ubuntu2004.RDS | Bin 39350 -> 39351 bytes tests/testdata/rang_6.RDS | Bin 0 -> 4470 bytes tests/testdata/rang_mixture.RDS | Bin 0 -> 556 bytes tests/testdata/rang_ok.RDS | Bin 0 -> 897 bytes tests/testdata/rang_rio_old.RDS | Bin 0 -> 1073 bytes tests/testdata/rang_unresolved.RDS | Bin 0 -> 310 bytes tests/testdata/sle_graph.RDS | Bin 918 -> 917 bytes tests/testthat/test_dockerize.R | 104 ++++++------- ...t_export_granlist.R => test_expost_rang.R} | 66 ++++----- tests/testthat/test_resolve.R | 18 +-- tests/testthat/test_s3.R | 36 ++--- 25 files changed, 225 insertions(+), 227 deletions(-) rename man/{export_granlist.Rd => export_rang.Rd} (86%) delete mode 100644 tests/testdata/gran_6.RDS delete mode 100644 tests/testdata/gran_mixture.RDS delete mode 100644 tests/testdata/gran_ok.RDS delete mode 100644 tests/testdata/gran_rio_old.RDS delete mode 100644 tests/testdata/gran_unresolved.RDS create mode 100644 tests/testdata/rang_6.RDS create mode 100644 tests/testdata/rang_mixture.RDS create mode 100644 tests/testdata/rang_ok.RDS create mode 100644 tests/testdata/rang_rio_old.RDS create mode 100644 tests/testdata/rang_unresolved.RDS rename tests/testthat/{test_export_granlist.R => test_expost_rang.R} (56%) diff --git a/DESCRIPTION b/DESCRIPTION index f8f4557..cdcf0ea 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,4 +1,4 @@ -Package: gran +Package: rang Title: Reconstructing Reproducible R Computational Environments With Ease Version: 0.0.5 Authors@R: diff --git a/NAMESPACE b/NAMESPACE index 99d05cf..99fa829 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,12 +1,12 @@ # Generated by roxygen2: do not edit by hand -S3method(print,gran) -S3method(print,granlist) +S3method(print,rang) +S3method(print,ranglet) export(dockerise) -export(dockerise_granlist) +export(dockerise_rang) export(dockerize) -export(dockerize_granlist) -export(export_granlist) +export(dockerize_rang) +export(export_rang) export(resolve) importFrom(memoise,memoise) importFrom(pkgsearch,cran_package_history) diff --git a/R/installation.R b/R/installation.R index 34f08c4..39c5eb8 100644 --- a/R/installation.R +++ b/R/installation.R @@ -1,5 +1,3 @@ -##granlist <- readRDS("tests/testdata/graph.RDS") - .safe_get_uid <- function(pkgref, uid) { if (is.null(uid$get(pkgref))) { return(NA_character_) @@ -8,28 +6,28 @@ } } -.determine_installation_order <- function(granlist) { +.determine_installation_order <- function(rang) { dep <- fastmap::fastmap() version <- fastmap::fastmap() uid <- fastmap::fastmap() ## package name as per DESCRIPTION, aka. x ## can't use x here because it is too generic pkgname <- fastmap::fastmap() - for (gran in granlist$grans) { - current_pkgref <- unique(gran$original$x_pkgref) - current_ver <- unique(gran$original$x_version) - current_dep <- .keep_queryable_dependencies(dep_df = gran$original, no_enhances = gran$no_enhances, no_suggests = gran$no_suggests) - current_pkgname <- unique(gran$original$x) + for (ranglet in rang$ranglets) { + current_pkgref <- unique(ranglet$original$x_pkgref) + current_ver <- unique(ranglet$original$x_version) + current_dep <- .keep_queryable_dependencies(dep_df = ranglet$original, no_enhances = ranglet$no_enhances, no_suggests = ranglet$no_suggests) + current_pkgname <- unique(ranglet$original$x) dep$set(current_pkgref, current_dep) version$set(current_pkgref, current_ver) pkgname$set(current_pkgref, current_pkgname) - if ("x_uid" %in% colnames(gran$original)) { - uid$set(current_pkgref, unique(gran$original$x_uid)) + if ("x_uid" %in% colnames(ranglet$original)) { + uid$set(current_pkgref, unique(ranglet$original$x_uid)) } - for (dep_df in gran$deps) { + for (dep_df in ranglet$deps) { current_pkgref <- unique(dep_df$x_pkgref) current_ver <- unique(dep_df$x_version) - current_dep <- .keep_queryable_dependencies(dep_df = dep_df, no_enhances = gran$no_enhances, no_suggests = gran$no_suggests) + current_dep <- .keep_queryable_dependencies(dep_df = dep_df, no_enhances = ranglet$no_enhances, no_suggests = ranglet$no_suggests) current_pkgname <- unique(dep_df$x) dep$set(current_pkgref, current_dep) version$set(current_pkgref, current_ver) @@ -94,8 +92,8 @@ ## invisible() ## } -.has_ppa_in_sysreqs <- function(granlist, warn = TRUE) { - res <- isTRUE(any(grepl("add-apt-repository", granlist$deps_sysreqs))) +.has_ppa_in_sysreqs <- function(rang, warn = TRUE) { + res <- isTRUE(any(grepl("add-apt-repository", rang$deps_sysreqs))) if (isTRUE(res) && isTRUE(warn)) { warning("The command for getting system requirements is likely not going to work for the default Docker images. You might need to requery system requirements with another version of Ubuntu.", call. = FALSE) } @@ -116,41 +114,41 @@ return(cmd) } -.consolidate_sysreqs <- function(granlist) { - if (length(granlist$deps_sysreqs) == 0) { +.consolidate_sysreqs <- function(rang) { + if (length(rang$deps_sysreqs) == 0) { return("apt-get update -qq") } - if (isFALSE(.has_ppa_in_sysreqs(granlist))) { - cmds <- granlist$deps_sysreqs + if (isFALSE(.has_ppa_in_sysreqs(rang))) { + cmds <- rang$deps_sysreqs prefix <- "" cmd <- .group_apt_cmds(cmds, fix_libgit2 = TRUE) } else { - cmds <- setdiff(granlist$deps_sysreqs, c("apt-get install -y software-properties-common", "apt-get update")) + cmds <- setdiff(rang$deps_sysreqs, c("apt-get install -y software-properties-common", "apt-get update")) ppa_lines <- c("apt-get install -y software-properties-common", - grep("^add-apt-repository", granlist$deps_sysreqs, value = TRUE), + grep("^add-apt-repository", rang$deps_sysreqs, value = TRUE), "apt-get update") - cmds <- setdiff(granlist$deps_sysreqs, ppa_lines) + cmds <- setdiff(rang$deps_sysreqs, ppa_lines) prefix <- paste0(paste0(ppa_lines, collapse = " && "), " && ") cmd <- .group_apt_cmds(cmds, fix_libgit2 = FALSE) } paste0("apt-get update -qq && ", prefix, cmd) } -.write_granlist_as_comment <- function(granlist, con, path, verbose, lib, +.write_rang_as_comment <- function(rang, con, path, verbose, lib, cran_mirror, check_cran_mirror) { cat("## ## To reconstruct this file, please install version", - as.character(utils::packageVersion("gran")), "of `gran` and run:\n", file = con) - cat("## granlist <- \n", file = con) - tempgrancontent <- tempfile() - dput(granlist, file = tempgrancontent) - granlist_src <- readLines(tempgrancontent) - writeLines(paste("##", granlist_src), con = con) + as.character(utils::packageVersion("rang")), "of `rang` and run:\n", file = con) + cat("## rang <- \n", file = con) + temprangcontent <- tempfile() + dput(rang, file = temprangcontent) + rang_src <- readLines(temprangcontent) + writeLines(paste("##", rang_src), con = con) if (is.na(lib)) { lib_as_character <- "NA" } else { lib_as_character <- paste0("\"", lib, "\"") } - writeLines(paste0("## gran::export_granlist(granlist = granlist, path = \"", path, "\", verbose = ", + writeLines(paste0("## rang::export_rang(rang = rang, path = \"", path, "\", verbose = ", as.character(verbose), ", lib = ", lib_as_character, ", cran_mirror = \"", cran_mirror, "\", check_cran_mirror = ", as.character(check_cran_mirror), ")"), con = con) @@ -226,8 +224,8 @@ unlink(expected_tarball_path) } -.cache_pkgs <- function(granlist, output_dir, cran_mirror, verbose) { - install_order <- .determine_installation_order(granlist) +.cache_pkgs <- function(rang, output_dir, cran_mirror, verbose) { + install_order <- .determine_installation_order(rang) cache_dir <- file.path(output_dir, "cache") if (!dir.exists(cache_dir)) { dir.create(cache_dir) @@ -253,17 +251,17 @@ } .insert_cache_dir <- function(basic_docker) { - gran_line <- which(basic_docker == "RUN Rscript gran.R") - c(basic_docker[1:(gran_line - 1)], + rang_line <- which(basic_docker == "RUN Rscript rang.R") + c(basic_docker[1:(rang_line - 1)], "COPY cache ./cache", - basic_docker[gran_line:length(basic_docker)]) + basic_docker[rang_line:length(basic_docker)]) } .insert_materials_dir <- function(basic_docker){ - gran_line <- which(basic_docker == "COPY gran.R ./gran.R") - c(basic_docker[1:gran_line], + rang_line <- which(basic_docker == "COPY rang.R ./rang.R") + c(basic_docker[1:rang_line], "COPY materials/ ./materials/", - basic_docker[(gran_line + 1):length(basic_docker)]) + basic_docker[(rang_line + 1):length(basic_docker)]) } .generate_pre310_docker <- function(r_version, debian_version = "lenny", lib, sysreqs_cmd, cache) { @@ -271,7 +269,7 @@ paste0("FROM debian/eol:", debian_version), "ENV TZ UTC", "RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && apt-get update -qq && apt-get install wget locales build-essential r-base-dev -y", - "COPY gran.R ./gran.R", + "COPY rang.R ./rang.R", "COPY compile_r.sh ./compile_r.sh", paste("RUN", sysreqs_cmd), paste("RUN bash compile_r.sh", r_version), @@ -288,9 +286,9 @@ #' Export The Resolved Result As Installation Script #' #' This function exports the results from [resolve()] to an installation script that can be run in a fresh R environment. -#' @param granlist output from [resolve()] +#' @param rang output from [resolve()] #' @param path character, path of the exported installation script -#' @param granlist_as_comment logical, whether to write granlist and the steps to reproduce +#' @param rang_as_comment logical, whether to write resolved result and the steps to reproduce #' the file to `path` as comment #' @param verbose logical, pass to [install.packages()], the negated value is also passed as `quiet` to both [install.packages()] #' and [download.file()]. @@ -309,13 +307,13 @@ #' if (interactive()) { #' graph <- resolve(pkgs = c("openNLP", "LDAvis", "topicmodels", "quanteda"), #' snapshot_date = "2020-01-16") -#' export_granlist(graph, "gran.R") +#' export_rang(graph, "rang.R") #' } #' } -export_granlist <- function(granlist, path, granlist_as_comment = TRUE, verbose = TRUE, lib = NA, +export_rang <- function(rang, path, rang_as_comment = TRUE, verbose = TRUE, lib = NA, cran_mirror = "https://cran.r-project.org/", check_cran_mirror = TRUE) { - if (utils::compareVersion(granlist$r_version, "2.1") == -1) { - stop("`export_granlist` doesn't support this R version (yet).") + if (utils::compareVersion(rang$r_version, "2.1") == -1) { + stop("`export_rang` doesn't support this R version (yet).") } cran_mirror <- .normalize_url(cran_mirror) if (isTRUE(check_cran_mirror)) { ## probably need to stop this also if #17 is implemented @@ -323,13 +321,13 @@ export_granlist <- function(granlist, path, granlist_as_comment = TRUE, verbose stop(cran_mirror, "does not appear to be a valid CRAN mirror.", call. = FALSE) } } - if (utils::compareVersion(granlist$r_version, "3.3") == -1) { #20 + if (utils::compareVersion(rang$r_version, "3.3") == -1) { #20 cran_mirror <- .normalize_url(cran_mirror, https = FALSE) } - install_order <- .determine_installation_order(granlist) + install_order <- .determine_installation_order(rang) file.create(path) con <- file(path, open="w") - writeLines(readLines(system.file("header.R", package = "gran")), con = con) + writeLines(readLines(system.file("header.R", package = "rang")), con = con) cat("install_order <- ", file = con) dput(install_order, file = con) cat("\n", file = con) @@ -340,9 +338,9 @@ export_granlist <- function(granlist, path, granlist_as_comment = TRUE, verbose cat(paste0("lib <- \"", as.character(lib), "\"\n"), file = con) } cat(paste0("cran_mirror <- \"", cran_mirror, "\"\n"), file = con) - writeLines(readLines(system.file("footer.R", package = "gran")), con = con) - if (isTRUE(granlist_as_comment)) { - .write_granlist_as_comment(granlist = granlist, con = con, path = path, verbose = verbose, + writeLines(readLines(system.file("footer.R", package = "rang")), con = con) + if (isTRUE(rang_as_comment)) { + .write_rang_as_comment(rang = rang, con = con, path = path, verbose = verbose, lib = lib, cran_mirror = cran_mirror, check_cran_mirror = check_cran_mirror) } @@ -361,9 +359,9 @@ export_granlist <- function(granlist, path, granlist_as_comment = TRUE, verbose #' @param cache logical, whether to cache the packages now. Please note that the system requirements are not cached. For query with non-CRAN packages, this option is strongly recommended. #' @param ... arguments to be passed to `dockerize` #' @return `output_dir`, invisibly -#' @inheritParams export_granlist -#' @inherit export_granlist details -#' @seealso [resolve()], [export_granlist()] +#' @inheritParams export_rang +#' @inherit export_rang details +#' @seealso [resolve()], [export_rang()] #' @references #' [The Rocker Project](https://rocker-project.org) #' Ripley, B. (2005) [Packages and their Management in R 2.1.0.](https://cran.r-project.org/doc/Rnews/Rnews_2005-1.pdf) R News, 5(1):8--11. @@ -376,45 +374,45 @@ export_granlist <- function(granlist, path, granlist_as_comment = TRUE, verbose #' } #' } #' @export -dockerize <- function(granlist, output_dir, materials_dir = NULL, image = c("r-ver", "rstudio", "tidyverse", "verse", "geospatial"), - granlist_as_comment = TRUE, cache = FALSE, verbose = TRUE, lib = NA, +dockerize <- function(rang, output_dir, materials_dir = NULL, image = c("r-ver", "rstudio", "tidyverse", "verse", "geospatial"), + rang_as_comment = TRUE, cache = FALSE, verbose = TRUE, lib = NA, cran_mirror = "https://cran.r-project.org/", check_cran_mirror = TRUE) { if (missing(output_dir)) { stop("You must provide `output_dir`.", call. = FALSE) } - if (!grepl("^ubuntu", granlist$os)) { - stop("System dependencies of ", granlist$os, " can't be dockerized.", call. = FALSE) + if (!grepl("^ubuntu", rang$os)) { + stop("System dependencies of ", rang$os, " can't be dockerized.", call. = FALSE) } - if (utils::compareVersion(granlist$r_version, "2.1") == -1) { - stop("`dockerize` doesn't support this R version (yet):", granlist$r_version, call. = FALSE) + if (utils::compareVersion(rang$r_version, "2.1") == -1) { + stop("`dockerize` doesn't support this R version (yet):", rang$r_version, call. = FALSE) } if (!is.null(materials_dir) && !(dir.exists(materials_dir))) { stop(paste0("The folder ", materials_dir, " does not exist"), call. = FALSE) } image <- match.arg(image) - sysreqs_cmd <- .consolidate_sysreqs(granlist) + sysreqs_cmd <- .consolidate_sysreqs(rang) if (!dir.exists(output_dir)) { dir.create(output_dir) } - gran_path <- file.path(output_dir, "gran.R") - export_granlist(granlist = granlist, path = gran_path, granlist_as_comment = granlist_as_comment, + rang_path <- file.path(output_dir, "rang.R") + export_rang(rang = rang, path = rang_path, rang_as_comment = rang_as_comment, verbose = verbose, lib = lib, cran_mirror = cran_mirror, check_cran_mirror = check_cran_mirror) if (isTRUE(cache)) { - .cache_pkgs(granlist, output_dir, cran_mirror, verbose) + .cache_pkgs(rang, output_dir, cran_mirror, verbose) } - if (utils::compareVersion(granlist$r_version, "3.1") == -1) { - file.copy(system.file("compile_r.sh", package = "gran"), file.path(output_dir, "compile_r.sh"), + if (utils::compareVersion(rang$r_version, "3.1") == -1) { + file.copy(system.file("compile_r.sh", package = "rang"), file.path(output_dir, "compile_r.sh"), overwrite = TRUE) - basic_docker <- .generate_pre310_docker(materials_dir, r_version = granlist$r_version, + basic_docker <- .generate_pre310_docker(materials_dir, r_version = rang$r_version, sysreqs_cmd = sysreqs_cmd, lib = lib, cache = cache) } else { - basic_docker <- c("", "", "COPY gran.R ./gran.R", "RUN Rscript gran.R", "CMD [\"R\"]") + basic_docker <- c("", "", "COPY rang.R ./rang.R", "RUN Rscript rang.R", "CMD [\"R\"]") if (!is.na(lib)) { - basic_docker[4] <- paste0("RUN mkdir ", lib, " && Rscript gran.R") + basic_docker[4] <- paste0("RUN mkdir ", lib, " && Rscript rang.R") } - basic_docker[1] <- paste0("FROM rocker/", image, ":", granlist$r_version) + basic_docker[1] <- paste0("FROM rocker/", image, ":", rang$r_version) basic_docker[2] <- paste("RUN", sysreqs_cmd) if (image == "rstudio") { basic_docker[5] <- "EXPOSE 8787" @@ -440,7 +438,7 @@ dockerize <- function(granlist, output_dir, materials_dir = NULL, image = c("r-v #' @rdname dockerize #' @export -dockerize_granlist <- function(...) { +dockerize_rang <- function(...) { dockerize(...) } @@ -452,6 +450,6 @@ dockerise <- function(...) { #' @rdname dockerize #' @export -dockerise_granlist <- function(...) { +dockerise_rang <- function(...) { dockerize(...) } diff --git a/R/resolve.R b/R/resolve.R index 9f90da3..333954a 100644 --- a/R/resolve.R +++ b/R/resolve.R @@ -182,7 +182,7 @@ NULL #' packages are assumed to have no system requirement. #' @param os character, which OS to query for system requirements #' @param verbose logical, whether to display messages -#' @return S3 object `granlist` +#' @return S3 object `rang` #' @export #' @seealso [dockerize()] #' @references @@ -216,7 +216,7 @@ resolve <- function(pkgs, snapshot_date, no_enhances = TRUE, no_suggests = TRUE, pkgrefs <- .normalize_pkgs(pkgs) output <- list() output$call <- match.call() - output$grans <- list() + output$ranglets <- list() output$snapshot_date <- snapshot_date output$no_enhances <- no_enhances output$no_suggests <- no_suggests @@ -228,23 +228,23 @@ resolve <- function(pkgs, snapshot_date, no_enhances = TRUE, no_suggests = TRUE, tryCatch({ res <- .resolve_pkgref(pkgref = pkgref, snapshot_date = snapshot_date, no_enhances = no_enhances, no_suggests = no_suggests, verbose = verbose) - output$grans[[pkgref]] <- res + output$ranglets[[pkgref]] <- res }, error = function(err) { if (isTRUE(verbose)) { cat("Query failed: ", pkgref, "\n") } }) } - output$unresolved_pkgrefs <- setdiff(pkgrefs, names(output$grans)) + output$unresolved_pkgrefs <- setdiff(pkgrefs, names(output$ranglets)) if (length(output$unresolved_pkgrefs) > 0) { warning("Some package(s) can't be resolved: ", paste(output$unresolved_pkgrefs, collapse = ", "), call. = FALSE) } if (isTRUE(get_sysreqs)) { - res <- .granlist_query_sysreqs(output, os = os) + res <- .rang_query_sysreqs(output, os = os) output$deps_sysreqs <- res .has_ppa_in_sysreqs(output) } - attr(output, "class") <- "granlist" + attr(output, "class") <- "rang" return(output) } @@ -281,12 +281,12 @@ resolve <- function(pkgs, snapshot_date, no_enhances = TRUE, no_suggests = TRUE, output$unresolved_deps <- c(output$unresolved_deps, current_pkgref) }) } - attr(output, "class") <- "gran" + attr(output, "class") <- "ranglet" return(output) } #' @export -print.gran <- function(x, ...) { +print.ranglet <- function(x, ...) { total_deps <- length(x$deps) if (total_deps != 0) { total_terminal_nodes <- sum(unlist(lapply(x$deps, .is_terminal_node, no_enhances = x$no_enhances, no_suggests = x$no_suggests))) @@ -300,15 +300,15 @@ print.gran <- function(x, ...) { } #' @export -print.granlist <- function(x, all_pkgs = FALSE, ...) { - n_grans <- length(x$grans) - cat("resolved:", n_grans, "package(s). Unresolved package(s):", length(x$unresolved_pkgrefs), "\n") - if (n_grans > 0) { - if (n_grans <= 5 || isTRUE(all_pkgs)) { - print(x$grans) +print.rang <- function(x, all_pkgs = FALSE, ...) { + n_ranglets <- length(x$ranglets) + cat("resolved:", n_ranglets, "package(s). Unresolved package(s):", length(x$unresolved_pkgrefs), "\n") + if (n_ranglets > 0) { + if (n_ranglets <= 5 || isTRUE(all_pkgs)) { + print(x$ranglets) } else { cat("First 5 packages are:\n") - print(x$grans[seq_len(5)]) + print(x$ranglets[seq_len(5)]) } } } @@ -325,14 +325,14 @@ convert_edgelist <- function(x) { } ## extract all the pkgrefs of deps and pkgs: for .sysreqs -.granlist_extract_all_deps <- function(granlist) { - original_pkgrefs <- names(granlist$grans) - all_dep_pkgrefs <- unlist(lapply(granlist$grans, function(x) names(x$deps))) +.rang_extract_all_deps <- function(rang) { + original_pkgrefs <- names(rang$ranglets) + all_dep_pkgrefs <- unlist(lapply(rang$ranglets, function(x) names(x$deps))) unique(c(original_pkgrefs, all_dep_pkgrefs)) } -.granlist_query_sysreqs <- function(granlist, os = "ubuntu-20.04") { - targets <- .granlist_extract_all_deps(granlist) +.rang_query_sysreqs <- function(rang, os = "ubuntu-20.04") { + targets <- .rang_extract_all_deps(rang) if (length(targets) == 0) { warning("No packages to query for system requirements.", call. = FALSE) return(NA) diff --git a/man/dockerize.Rd b/man/dockerize.Rd index 3fc1982..997d53e 100644 --- a/man/dockerize.Rd +++ b/man/dockerize.Rd @@ -2,17 +2,17 @@ % Please edit documentation in R/installation.R \name{dockerize} \alias{dockerize} -\alias{dockerize_granlist} +\alias{dockerize_rang} \alias{dockerise} -\alias{dockerise_granlist} +\alias{dockerise_rang} \title{Dockerize The Resolved Result} \usage{ dockerize( - granlist, + rang, output_dir, materials_dir = NULL, image = c("r-ver", "rstudio", "tidyverse", "verse", "geospatial"), - granlist_as_comment = TRUE, + rang_as_comment = TRUE, cache = FALSE, verbose = TRUE, lib = NA, @@ -20,14 +20,14 @@ dockerize( check_cran_mirror = TRUE ) -dockerize_granlist(...) +dockerize_rang(...) dockerise(...) -dockerise_granlist(...) +dockerise_rang(...) } \arguments{ -\item{granlist}{output from \code{\link[=resolve]{resolve()}}} +\item{rang}{output from \code{\link[=resolve]{resolve()}}} \item{output_dir}{character, where to put the Docker file and associated content} @@ -36,7 +36,7 @@ dockerise_granlist(...) \item{image}{character, which versioned Rocker image to use. Can only be "r-ver", "rstudio", "tidyverse", "verse", "geospatial" This applies only to R version <= 3.1} -\item{granlist_as_comment}{logical, whether to write granlist and the steps to reproduce +\item{rang_as_comment}{logical, whether to write resolved result and the steps to reproduce the file to \code{path} as comment} \item{cache}{logical, whether to cache the packages now. Please note that the system requirements are not cached. For query with non-CRAN packages, this option is strongly recommended.} @@ -78,5 +78,5 @@ if (interactive()) { Ripley, B. (2005) \href{https://cran.r-project.org/doc/Rnews/Rnews_2005-1.pdf}{Packages and their Management in R 2.1.0.} R News, 5(1):8--11. } \seealso{ -\code{\link[=resolve]{resolve()}}, \code{\link[=export_granlist]{export_granlist()}} +\code{\link[=resolve]{resolve()}}, \code{\link[=export_rang]{export_rang()}} } diff --git a/man/export_granlist.Rd b/man/export_rang.Rd similarity index 86% rename from man/export_granlist.Rd rename to man/export_rang.Rd index da25413..287b520 100644 --- a/man/export_granlist.Rd +++ b/man/export_rang.Rd @@ -1,13 +1,13 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/installation.R -\name{export_granlist} -\alias{export_granlist} +\name{export_rang} +\alias{export_rang} \title{Export The Resolved Result As Installation Script} \usage{ -export_granlist( - granlist, +export_rang( + rang, path, - granlist_as_comment = TRUE, + rang_as_comment = TRUE, verbose = TRUE, lib = NA, cran_mirror = "https://cran.r-project.org/", @@ -15,11 +15,11 @@ export_granlist( ) } \arguments{ -\item{granlist}{output from \code{\link[=resolve]{resolve()}}} +\item{rang}{output from \code{\link[=resolve]{resolve()}}} \item{path}{character, path of the exported installation script} -\item{granlist_as_comment}{logical, whether to write granlist and the steps to reproduce +\item{rang_as_comment}{logical, whether to write resolved result and the steps to reproduce the file to \code{path} as comment} \item{verbose}{logical, pass to \code{\link[=install.packages]{install.packages()}}, the negated value is also passed as \code{quiet} to both \code{\link[=install.packages]{install.packages()}} @@ -47,7 +47,7 @@ is provided. The current approach does not work in R < 2.1.0. if (interactive()) { graph <- resolve(pkgs = c("openNLP", "LDAvis", "topicmodels", "quanteda"), snapshot_date = "2020-01-16") - export_granlist(graph, "gran.R") + export_rang(graph, "rang.R") } } } diff --git a/man/resolve.Rd b/man/resolve.Rd index 7dc3091..878f850 100644 --- a/man/resolve.Rd +++ b/man/resolve.Rd @@ -31,7 +31,7 @@ packages are assumed to have no system requirement.} \item{verbose}{logical, whether to display messages} } \value{ -S3 object \code{granlist} +S3 object \code{rang} } \description{ This function recursively queries dependencies of R packages at a specific snapshot time. The dependency graph can then be used to recreate the computational environment. The data on dependencies are provided by R-hub. diff --git a/tests/testdata/gran_6.RDS b/tests/testdata/gran_6.RDS deleted file mode 100644 index 73f6d064cc568e7930cd3ce5f208d2b7d97c7b15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4467 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 F006e#z%c*- diff --git a/tests/testdata/gran_mixture.RDS b/tests/testdata/gran_mixture.RDS deleted file mode 100644 index 947c1c4b92a921778354efbf83c582ee06bd550b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 557 zcmV+|0@D2-iwFP!000001GQA$ZqqOncJtG;Wrc~p0N0>KNyi161k%KWgoFedo3y*g zOT8>w=7c!u7OuGD<#+(JcWH3!oDf^-1QJAYVjrLLozLex@%aoPWFpHjkZJQNvd>Q6 zEnjilf-k0gjQJQLOU#{|ur%2a!~=R}E4z-E<~j=bt8v=z8BIpWvHLSinidvd|-ouPN2pn`ftQC2c6R$ZkM(m4#jZMdES2GnaxP zmV}oiAqEyQ>CW(h5+_-xQp8qcYt*lY)H=Hl>Rnk>zP;?MT8aXp<+$aJdR?D6FB&qWDxMAr0un|4upC5s8+-!L){hQ==(}< zZHMoIf7azY?jOZ{PZH|x#{FKwyLR*41J~CB%Zrj0<#Oe@-b?MY(2`b&6DX$LROZ3* v|Cw@6dqPOzVP~(=C14fH$rsi&nAWRCx=XrALokV1(NymjninR>vIYPE&9NSM diff --git a/tests/testdata/gran_ok.RDS b/tests/testdata/gran_ok.RDS deleted file mode 100644 index 512789fc8ddb8dcac8787e846386ed8b8f71b37e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 897 zcmV-{1AhD;iwFP!000001MOJNZqq;zb`v{44M~B%K+j0A@+W93fvBjEiV&^(BlQ+- z<85Na*)_XP+Hm5`lkg0jcnKsP0U^YJGiq4>jN{!prLB}g5mKD>OlEiH+xfgR@!_JT zX<1FrWVEayZZ+dz|9N#)=$3_06jx4M3z{C>=NabI8DULKNT_wU-{oSwo6zN6Zf=Zh zu2_~iK`!r6uWca@D^nI5wMMgAtBa42&NMBv9Q+!_l2@$nbQmJ*>)=LP3~hreai6XD zu^2V8X*O<;0Brj7?!y<6=9?Pl$R_z2{;yLRy08lja2Y)v z!_M!%*xP=!wH=8C7ct~G*nvz8dMJ$80nedNu)% zMxWTRS&s$1MfJ4jfVh#?AJ#XN6lsYPy{3doWvA}hHYv5AmT}~|Q4ZFUNzfV>$ zK6$*-FzYqQ--GMil*A%6vu3WEYirkBNQo+>7?7zHib+b9BMXUGmB>z}SHxF|WW`W7 zrP{qvah`CI?DITC5gBcs#H2g0ZOEdOcT_Ut2sdf47n_(_bSoeo&x04 z_6Rd>Q!-V!!=r?0K`8oNhL2$?K+(Oi3r6K}o1qhBslpg$%13Y9C6KeTB_l~MYWg*o;OapwrsQq*;`S*@E7r;+S@UHLfINEE6o@eHun zqn6st#;1|2jvq8-?RXJCt{lX53wf2FC^VXA=i6KT5459tT3!6DAkWR!%vQDW=n7Jd z_r3i+z?VMG5pT-TeGQeo=CsM+9*QfRG4$;C)XsK}kTUB^)m$x?ut-5vx~ADOFRYh} z-_%-`j66~$l&btdR$zO2|rtwlV1;(!o5T;&OkK zx}OEg?5<4^bP~FSU6`;mB+Nbs}0fkwPui1?}(lY7V$UY!ri`HqV6a5J(iwFP!000001Kn6lZ__{!b{@{7FAzO&Ldp#ZWXpM!mP#NH2-FjZwo-4w zO}36z$2Ru5ZF(vveh5dznQMOo;=nIKNK_5$$JpM@CQVwIM-R?=CbPRU>+hSL-JLl> z5DG#upBD-uc@@O%tryZ7(Jd39N}dvVazZh9FFVM!i~}T)4k>lf-q&2x-c0EVj&3n# zi>|5KZqLH)u8I+3Ki5#|O-Wgk8V`wdE(rPM;NQ@ZGGkrsII6k69?T)kg@(bCdM_;b z?bB}`KA!r4(Y}ZsLv_LDJcRf9)#k=d2S;Kl5HZ^mA6q8tePMg+S?D&bTQGYOW*^sv zV;6@rI3fE8Ry_u2b^CF zMLL8?Ne8kNDwA+%l$&ZFfqzv#fg_KO!26^20did3G82XE?WRmCM6s_qXb-v$Ac5e4 z4MvNDwxb?0LsbUQlLk|qJ;*Goyyp<7nLw(JbtpqHi$4BN$j@*%JQI>MBQm@dFXC;6 z{1r!lc2$`kmymZg&Ey$`cyYGAd_MITVRD<{;;`V&N=wh0q=-JkJu4=AsjF+G2S0yQ z(1B`r$%Y4mu?gb}`2&WG@<(Gr{wNU>MQ(v_p(Hn1-?&MI4tgO}QlWFRPqe1VGWZ|5 z1Rwf8%q`_1lS+OG|JK%@KyFrfq#S6;tJ4Z`-0%B8f-JyqGmM)>+SRqpUP}WzP6ur2 zEo+)>Sh&GH48&$U)8D zELoUS_LL&CGb-|$w9=YEisMFKf1dbp^4kpK<{r&2tsHZsA-Y&i$_~1W7d@;SY>jcb zvkCVygI}49DN&f@JrBD|;yw2$64^zOTsy8t)d>~XR0meo!sQK$z)QIz(72{qV zpJ%*bj=7qK#iTyvZPmt-hHy%>Lh$m63gP!Q1sr>`4tpR$5~STI`UaVG#clPQ=M{5WAH^ rOo-6<^1=sD+a0(LdI!3y!!S2*jl)>QchJy-g5&%*&`X3HLm2=7sLcCf diff --git a/tests/testdata/gran_unresolved.RDS b/tests/testdata/gran_unresolved.RDS deleted file mode 100644 index 22a8214e916d92077b70a6eabb58bddfef044878..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 311 zcmV-70m%LziwFP!0000018q@FOT;h`jr~|{U1ibV(IpfQc5jO!2!evUuoo$@joo5R zY9=k{X;1z-f0Jwa5s1OVkeQb^GjC=#AwtMSp5q|bS1$6`tDERjVdp9clueW!Ag}ii z1qEKU6sZIQ_UhLH)H^e<$=&s`Ex}@*03$VQxlD5+sg)AO7~=@XQJkpgM_H$#(|6jj zmfufbL;R1!GNGC z3JOv~XAK*Vny2cFg1+dVX-;cM;R6JH*H|FZmI^328v%!pC-(N%bVr@Qss!0>^B1zt J3I=Ba000QRi{}6U diff --git a/tests/testdata/graph.RDS b/tests/testdata/graph.RDS index ac872a0ad37112a073b134abfa0f029432d5723e..e0d3d03b356603ee468609202ba7259102f09380 100644 GIT binary patch delta 2368 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 delta 2308 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 R2mL0 z^-vq{)gAEAiDJPB?n1BG{#YR)y*z0c#TUW$K<2$UN}g}FA1#XY?MZ^qa6hI^v*$E> zx%WEf{I(%I0Z?s(fQ}Wn3iZ5snN@oc%vA>Dy@6HuQh54| zK@gwN7f3C9xT_UKsme1_-PUe#*P(q(BCkXvUiTiu^y}3lm{)f``!Qt8uGltC-h0Gi zq4F~JLa>*UYJC{Zf;6pXMiCtIGJcFv@U2n}akpq8nGJ*S8sReIVve$;f+X}&)xM_D@JuM9~p^JKBC7T9W(p$ zPML^_-ya4%)@Q)y9j&k4EW9C2{bOQ@1nlVP)3zFs-g%o_uQ++PD3 zIiGb%EP?D-~sr}6#7xvz?^I_CW>pK3OKs#fcNY|`M$6@ThvdE46od*2YGL1LpL z(YS5?QxoosD{K9>VujO7zaLNgLXbru;EV124maknKdZBuwOo_*c`IpErSk`;PMY(0 z?I9Ms&87);Aq1HMdz!U{SQx|oRr=R8>%{Kf0lTSQDECtHppuRD=5cMfoH$nqv|yu5 zo@ReK@v7Rj-*td^i%yfLD$95I=UkkYx##@3=B|(W)ky7ZKLpNn+`3n@e36k$_~4X$ zS7X?r75av-Z%z^}!Hg!TYZ{5Hhk(wf^U0i|^Ylc)gjox;E8%q*R8TSQD_I0LV}!jyJOi^K zO(x(%-e!-15XI)3K9$VANS0}zoxr(8nr-)ZhjKFUjuec+LT&K>G!u8V&Nd29F8+eU zE*Z{m+toI+mluU*_~gy~YOHSr*>L62aT+JHHy`EZM+uiVKNAbqGqD3NdzH8|PWO4{ z$Ip@P3pif#GxgM=vwjFy-n^vGWYe!q9h$y_8kdL}7d9w6cfM6O|9S@&thv9tL@oqc+G{vC16(^!m1HEAXq~AnX z%y|>8vcw7Pv`gr8pzp)=B2Et6Hl%ktZbq_~TToFSkt&ewV$fIps zV;0Z-zOtFm5%aMTLU+6`66t{%1qb%9p2E?vM^Uyb|3~a!0Uz`~*|r+!1stdYh-_{k z-JbqT?d!$uMUcAy!R1tpo%tQ_>g14epS0twq_U;zpm?{Ea))BD4)-C&upz6dqg0;% z=52USIB=SZZg@y=#F}6AQ@LLAne(bT5v{7Go0Mn|zI)yTx=?~(){sh4+ez{28ALH* zZH=$v5=7JWkZa;%yoz*;zD3_QYGuob;HIcRMd%clrZU!2Tt(D`wz6P)!$tYmPKWd_ zpuw^C;DyXPZH_xoNl>~!w~=of;;=cwkZn2gRClsOQ%yO^lJ4UEetEZxyTZdu(?pzO zf-JuW8Z(bfUo`OI7^Yu(MBQ}pd4}X(y#k*ZXKp?9lnwH9**D3u9#}((DyQ6EN0K>X#JB4PE!W4*qsp!7kFTpDano9P=fQ)Mg4`4 z#RsIbN=|i&Peh}}=sI{kzDJ1h9X$v%f}CO|{*GQtlgG5$qEcZ&RE%>g6dXE`@ zziwixC`_jtq;g_!soljG2KS>tQ&Tdb5IH81VWp5KF+%L!8=!4`Kf9@U$1locFf3Q} zWRW4*v_rQ_roSpycyhIU?P@Pvkp^ISua2)}{yr)rga0fb2U)dLDBtO%)h)UwU{y~A zv`^TduLn?l1e6Qi9|#9~Qv0^K(L}qp*Os@ecY3G;&&zsSNAT3b(icoO*tRT`-xbY}O*>XCG!e&q zR{lJfZ&LW# zx6q+vu!-(r9`So zh6%Uw&6bXp=uye%&q^_wu8uCE0~5}F7>Z9x`EAo>MN2>`r)%P{JKp){J1o@0qgS2! zqlpocb<04}fa#bRHJT~5w2X4IVyq2Ix%Kz4t!XfLBlXR6glyr=`lx1O&XfUpT{Q2x ze+X$>aONhsae-8eTogF@&YAb4AEkZHk<4VOU%EPKC%qofl`FbY=tNKaW_p>$__6tb zEaWNwaHmzkoHH|^F`-14LsovfL ziolRy@GqLI>d1AP;$^3w#G~0E}ng#Scyca{B)8!KNuDN;nVAm#d zBzK%+f7SX4;CK{VKGt15->$@WthIhzubJOHYF@J1G}>;uc5An}(y?*d!TGnnZQe2* zWD7v`J+3r%qkG_%t@T^M?I2hJ{<5!BE!W+wQEjGfpOsVV^XaB|^2_G&>AK?1zW$JH ziqh)u7X9w|JR7|6`~>)ZzeD$b=kKDN)0S?d)9WTEd41Jxc|L)k0Yj4aANhYd-Y5cu z$^X5@0{Agww1qBi&NJ`MOFPAkD12?Af&O-x;_mF^Qm-f-h$QF zodR&bT?@TR3%NXfp9g;_jk0cGw0!pN%wWdnTk{>e*m`9jt+zYc<=8y8edXnrwK|-a zt-|Pfzp>#h3j3vRS$DpAZOK!rS@rrkS_J0&GOzBIXCDfB(bAd~3lQ}qIb&oS@>aBF zS|hndS*dVRfZzBR2I?GdleB4kPZv2|MmrD=*l*Nn3k)m zYDL(KO4|AEdTOfuR1ie&b_!1B;i6Sc6jXemhyuM^?`wejGiTeH+8+9Q{ki+uNcblG znpO1Q;lKTQyE(p&X86ryD?K|8$E3jHYf2uRG2*bzP?DzNoMlVSNUs|$Ad{q+!hq$( zX+pe0MwGw-=nlfuebsj}lzqXe80 z%v$h?G=%qGdJT*44AK%poKbyw7egv0G^)@662G*UIA}7mEzMtuo>9Dt_m;bipuczF zlzXP?^IdP){S3WYfahCFT7ou!bgKAx@GEyzdF;7-Ude?p5v2aPvT(GFB_QkT?Nfpw zRUP=(Q%LM0itR~>_Bt+XQC@3WNZbsl{*k(&58NIJ5WBRRxZaWn)>BLtha*jBAu@;G zkV}1HfEi3pR$YKwZyIq1Oc#~i90p3{EgcEiFQxTk`o;ONvkY94*_3&F?TP#Pa?pQe z?D5D5-~zzA{+;0kuAep9(=O5)v8>?3QyEU>i~;%NiV z%~e*78^wLl8jYO6&|z7y$x%QGKbu-->FP1hPam z7M(A1W#R~jOHj${eLs6kyB|vQ)rLAtT29!GKQA7TSLG6=M@BFTEUW0eH{I5!@_Z@& z!g5Aa^}4pf5wh8W`?1W;sz~GFHXXzeA0ess8$%nK%!6Qg^kVF&kWRI<3Rl#k9*tun z5U9!ssZ=veZ8kqnEJMZb;gkkeDM-Jjo!bbB!y#{H;Vycr2lVDu3 zXL{{DB8o2Rj7utA?ofB)L(1JJ*HB*NVWOoS;_NIRFPU_sQe z2R9J_-ViT80*KI&=w~z+Rc5Z~-4d)EZXn|CItL%Qz|k{Do*3eEasUJ?@6i{W9V%Fa zpSgs*4E|8lm<7#-iTHss*_q^vwma0!`}AJoaN*j-LAAfV#Md$Wn|3BTmd_(Zz7R=WfB1tvQ5)$`H?!U}hubc!oAInMgyU6pS7x=7cfy6>$xd>OcUv zZwyKup1IP(!-5*|KgIdp__iG1x0XN{?J(rt!u{@_ZtV2c*<1Wd@VmgJ?r7U`1Ou+6 zo4xXEShaEiM{-@Vd&KF!-inu*aIo&UA325bRueA=m8)zilC7lOZd*NXe&g+Nux^ag z4Dtk2xAgW4wm-Ux&yN{^D_hrIo=0O03U;!_OG{GX*q!60GanMk%}Y-*`)YR3=6H?> zUxA71-j!qu7w*`atdFEBdfq=nl-LK6cM$tkG~j!e`(}lS1n3X0R*9;5$5qB+xQ-PomF$Pti;c?uCqMje zJugCev-gZW1MF%N9annmXQ;Ka$FH7eE*ZAm9=@9(Z zeb$VcJt&yVlM{m7Mf{fAERd~sV1}eQsed6b)&{t#!s4^0!WC4HS+c_9GG+L08E^C2 zd>jg{j8zo{z8EHyq||91N-9h1?z|GH0pn$Zq!f*t$)SOJhm5|AsG|>&Ojn}i|7wCI zAZB1f%p>LS`md;($hbnP^r>Yzc@yH!`s1dHMc;XKFIpLV&+n;R@wwWgixpZ0 zd!4Kkii&$-b55NcfgVPi56&WQk%G){4@swTvu?McR}m&;JQ22o{5mx$^_n&+C_C?p z3p?{Okad)@5-$-*ugQ^|`({Y)Dj64DC8_n<*GI(3;+{sgIrk186~PXU5;sthpG%iQ zx;rYI_+ou3mu^$8y?MAABWfsX3R4oNPT}31#n$kGuD9Ilwl5obTuhg)IBia+gAgR^ z{7zi15}xH!>upNSV*EmT>iN3l6}IKl18? zFO~5mnB`x|h3yr6aQp)&A|W9Hhc}f_d}q*lq73P#%5}qp0=%T1kS1zHaq^M-{rQ-L zU}@?lgUCf2xo7fxu<0I%%rOV^QBXRJHX*5mFD6OZE!x*fhLVoV$eJyznH1+nlntU? z3G!dDz^J^K7(JQna_OlfT8yh0w?uKAdG7nAvD+b;@9 z1S9N!dMjvYVh!7|PA^Iaa~BY>+{$iGD&FY&yz>VX>+Pzi62Hkm@##HQGv~f&KG8_? z@-(rT{zUuUokzgxz>Y{j0IKU8A{8haZc%9dBf7 zQ)O$(u9Xkp-9xK#%@Wm<2=eUTnwcvR;)OwN;@SdBm#S#A1i$B+^m&OpzugJVMew{l)(khMj{r0_&aPYnT!&nTdWu+6C~Pbj{6$-59QwE zz$m9=vM4lN{W~^ayJ%`Izsl5u$?f`PbXndXf=nDJnNByP|Dwv3w5Yx;AFx%I?tC>q zi4NFiBqc`iEgx|mm;t*;w=D2ut-_F@6~fl9ckNP>=5fQ=lf#5zM9!Vttw<85mUMZa z`GJr1uC%ELukcmhJq4(S*z%&W6+?!xeB}-zw_p97$y3CpkfW*E!2Demt16zAM>peo zuQ9tTx2%Jl3=_v?bV%eyGwdQ7iey96IaDrxLS#}U`Fe=7IT$9kkFKqadEp|?%u1Gr zwl$!O+mtpdo4j7dzo$O!Z4z~qw7GS?vsCCK<`T@JDaOJjC(Ax9N8MxeauVeb14OV@ zBL?2bZ(Gwx{Ta6mNbOZUO2Q#!NZ)iMAc1 zi~kV9QHY`@OOkbEt0?jEs#Zmk78WC5^*#-fLG)@_piwmr^k}j+jsk1l>HWSP2Td}r zo(uq~zCC6$K<+NY5PGnk3(dG6-d6b;BHbk%W@r=SR|D5eeY8AS9LIKkI}|MWPX2ej+WY`Oq{@%7Cv&rqzh@T`yb+&26` z)8-mVJjAZVgL-!8&I5U|GZ+WQ%&vLvhqK62D|~n^oo?E1>8QJ|&veH>tP8o>viq^6 z1?#ZvUrnm(DUw*~Zf?{BQ{tb!UGr*pR-NbNZ?fz)+ij%1)ir0+VLWx`tSViOSuY)n zct7gQu+vM;$NDpM*;lc4YOMiqwLxOV)KJl}x@$RXvk%%(Y+Yt8HQhZTY=6A=MCXwQ zw$=+=f%DIEesE;?bFC?x`fu}Oa;nlF0bS~4L!5;}oP;O%Y#K*%5~Y|}S!)e_@92ZV z7Y2>2Ay6$ixKxcxH7=KV;SzOEmjw}c4*NjDX7YGr9gcS1G@Pk6vu};@5TfC_wg~uY!_V@e`XSb+qEm*uoZX1BfV;PT|VEQ$0j*vw9(jnYXR-J z>c3bB!uKD*bk}_(zxAoDw;g@tKFwWr%I#p^PUzh{a?-Gs;S1qW88(I6Xz43+5Xs-$%=CM%R)p-!b?y0S@Ys!HA}B);DR;sP5u{lE<4Qh1fZp z*-{!76`!3Cz0Vu)&t_adgw9Tf<2uVl+v~1n=khsK?F!(IUt=wrM(Xzc*?E86y{k{X z6iwOEK*mH@Tl!8~+sH5GIlMXtLMUxdpOdwwo*#GH{dYG(CQ4K)}lt zCt4&Tq)+3I?)|>5Pd*CdK$Izt=$421l&;C{%3r$T*ZvyNZDAYzAwk@8ex@KZSepF5{0jrcb?Vay%N@1> z=MQTy?ZuiNfMy@glvK^j?GLAJUw-Yu+n+D9`2`-WM~Rmq;u&yAvS$TckM^4#yq`98 z#9|Md?@dn-kg|N`350Va-$xpM(3p})ktGwD?;0lk&KJcQ+&zRh>r!QKI0^x6*3{9D zlYP=Meps9da&$A$gtF!PSe1i$X5X}mwC~@IYnTsP?!)Sqwx?4LUwOn8F#{ZJT~aRN zmpMd)Iu@?mH&qzF2)^cM@eW_Nv!h`0oB%p~v!i`XAK}F$p(W#(Y_a7i=GqxB<4kun z3eixNc3SN9eiM}(k)|_+s9Z$+1^QJ_6@a171r8S89S9`F1cB7yDE_8LYfPL@9|6_C zdK(wYm0ZaP%bM%=`G}7*1+1r(1&{qNsVHdz0S`7XKt&)(v)?^Aq#ySn&e}kAxo?8} zMB?aQeHj06K9aWQc6zGArHfX=KSS3Yaw&ta_A@w(a>VaUzt?K=-S8i*BSvd;;j;Y! zyD=mI$xw7^zZ!;{nD0b_7dk(L36;T#0#BIGyPU6_69m_>#mlp)6qHO$gP*_nYF7~Z zI%BUdBR{L*RHE!sl79(Nr z%biQ9#2G^Y%v^EspAZ;xArz!*#Dsl!_!^8kV$SGucafSE?zpU}9<`LmDOv2={sK3^mI9R_tXMlxBqo!N>@$0r~tr2dCwz~2MXm-KF)X&xYR-7X{zU$JC>b+k1x$|dv zey|RbMic^+&KfC9#cncP!-j*o(j6EAJd5Q=qkGrXQJ9SW(U?tBC(I9epLe)0Mmfp= zVR~13gF~+CvHg`Pj1Vk=2m<{Z!^4WA`}L^yMo##pp}Sv0xp&w?f;c{9a*TPREeI|I ziC7%E3{p-N0PI)}IUi-$nDzIn)w}9cvt8qF`OA`k|6%C$&#ud%7FT}Ik`<@gaDXEw zsY(Xh>iW8CHKNBzUIqt^5CNjS6_qE36z$YSP_lE2bAd~p%lC5ABh?qrVPdfmTR(mL zxQen&3}_@EN89MHx@jaD_k1s#chj=0_TPrDwo&D>bq5Ex91K_ay~s@cCIhHMgUPs! zku;%v~e?Nz)+c>Bv~EV?HRV{>{KZ5JNTD%qWefBBR(rJBOx=`C2cM zgRd|e@k(O38GYovrmWkG(oA)Tn^JodSaqe-rCRPUO4LW8S_Y9#+4pR^65$TD`xP}O z3a9XEzKGcK7pwp6!--BX(;t2k0sIzgo#+B_o=}R=KW8R$u*wW@F$gmVWJ*2f2$Z4^ zBHs84s6$>1bU^SW%vu#m6rB*0yHW6?YD8~Fp1F6d;Dg!-qI=bc(jkJaA^u{FaAv7o z!PtgI78(K~?FYi0I8+aPWik~r+}-|>|LzO09n8}$;u)8ITPlxh3SWNmf2nOd@NZN) z|9E=5K_*TMA;)9by5c30F_rex1Mz7EgDY%?l|Iqn9cis!w>U+u8aY{*FWY5@*cP>T z)B$F5Yuz;O463)fFw_!MAjfedzIE|3m0X3pX|m`M#SkJ8)dhH!`AcWlz9nu*H4;CM zt*QR*>GZ4DFmQN{#PDV}!Mh6bs}UnHZTFDQR_tyMwW+!Qi-cN#So4t6A#9N^cF6j* zpFT_FYt}=nU1>lsZVaFBl)Iaj=ltJEqv@8@yuAMV*R!uR1mAsU2}E<&nfWTa1-`D9 zD52Upt(>jm%?EFYZMl=>v{jSxDTOhmQ2vyvmE0)y7}cFzd{gJj)0wZ^_T>V+@Rcgx z+|`oZxcHRY)grv6?!EntT7GV*N(hp3kxD%Cw5(w;eq(;^b=jM zwD5F?v68nMz3}O&U)-T!oK97S45R!b6!^%p5x(59`xN8R$tmAM-kz+@?g$if2~*83&H56|08b!_PpPDYz|7h42vLq3t@@VI#0;`I{W#}D zFEKdg3tdAWv6^$Y@<@mhg2+3*L#GtGTecEd<*q9=BSq~#WRMGgp;sf}gTt7=at6Lb zc3LwV^N(Jm@LykdJAOv(JqwV_2A-C8?%;?pqo#HAc1xOACzutgQQFDNO_zEDu%G6= z8%rxfw+Eh#h`u;m^vy;Sy!t%7gd1!FH!S^Tr=Uz-RsWtd9U3yx#x^MJS?bi z(UTsfnGm&X-|a_*D)}s+Nn6tX4CdewiYLA9{i`tZaAGh=f9QnY(J-q-EwQR8GGbl} zZj4s6BcXM*5i%0{E8!fUSZiK6>Jj3MI0spQKIIJCbD&2OVZ1M^M9LeHp;)(Wn{RcU z_5-u5gNW+{s~6;j;tEM3TE$@I!bmT535(Ea=IJ=+NiAoftrW^(L_PJ}eTDQwkEO&$>!@o)5KkMeA-McwKgYV^EoV;aQ6HDV5HJx)rq(97BRimOcn1vOZl%`I71aT!e)e&3d}9foRl0Cc=uS}68^_8w1U$GjD? zDBpQU54TC}qjxr6I8~|r5A3$k7FW+LF;GHlqa<<>E|Mu>oU$MuPf#n_zOWpE)t>ZP zNpg&B?6xjLtva?5Ot|-z?0P#uS_bc7TTbD7y{_5E{!Ay%hUmkAY-8SiVg|q&q0`JY zC&B1n`F}|4k%;C58k!FzVL4Tji3DTfB zRl9sJIm+YUu}glYL)RgcOU8zdFivfZ+Y$r+`)t|g%(tRHkISQ@cd*>$#QZk1=z8`~_8+g=Gn_BPaBGouGt!j86sBcj=OWdH!801x!?{PR}uy3G| zqvv7`L^#YM&UMbZtkeBD%-4-xd;LcyT!H2$b4PWeO~6*l3go8z*zWKvYs)BrdCvv(BJgRkByj)o9iQ3NXD&s2BM~7X z)QLC2Ww-1$MG)4uY3{Ch%hn3}ACu7M#DVX^9!v*+_+STdNC`y%n2eanVsKtQ-$2qt zb||il5i((wxNtBuD)QZwRxo+=Cvuai5h%vPI>b~nEpYCKe6folSbFbF zU7mGq#~V_`{v`fhDFpqz2`^D3$g+{8eobevx+GFWi7&A^WaguVDq0FI7SJEwBVrdv zk3`U;rd~7yxmsZ z;Bf|1E!JdF%>s03&GS&QUydpUC%IA;jwDH$ivwbtR%=(Y`Dzw7LanyA#9J%;=)+pa zJt_W|F7>r4iUrXrn`I++XJ*-g0@o9pBl1$@3auX1c%E%5jYAF&NJF?dqp!g}uEyf2 z(TNlSQ26kV7a2Jvg@I{#*W5N z#h=^1X}kl5nTpH8G;zNQM#2k!Wd--EST!Drbg8GG)u_Lk23dZ%{*yoWW_VxlOua&BYBRc&Z=)nOKasD<1iP`d_70vIPsr@XN{*zF=Ai8IJ>LHa{w(fu-&ATk6mT*UhwyGXYsdDx4y1Mw(NkwSGFaTQrQA2k=qG1Vn{=-aMX{vww)+Y)NWXG|-77SV_Arle$BR9e zunB!5073cQLJ5TcF$COt!M(a&w!_%O4+Vp|etH;Ak|137fl5}?r|h%pwQ<*7`mA6t z#-E|#WwGn(G%xepZSP{4Bnivmb2tRMZsgw?n+g!PwUaPNMCyWqAhbr~c;d<51;yx5 z`e=(Wqxpyg+6MG!63>(}B|9Q3K9g{buX8kqS!^en(df%=$jpJTcEzqXpJFaCsmb?! z`mY`PoS)U{(XezK!A;w>;=l?WqU(rbc42IhMhpi)n%*6HGbE=S3PTZi<*vwLexh-_ zql{zR;FYdbTHIIndJKC~#09^_>h&usQhP-9d`1Z2OuVBXF7s8Wh(?ebV#zoNGH6Yw z9;>5?Dbc)y|9(P#?pMM2aTY8abhYo#288ED7sO0No6Q76RhcmJWL*8w3>IIK5GAB7 zVe1s6q~X%euw@zqEIPa8nxg_z z!uMV|ulz3WrDYVt^(#Qf$2iSbpqp@1p89d0Dlh060k;9WyML3bfX#tgIJ8v14J*$e zC>RU$OE$cWC|Se5+bQBw=9|qD&rVrPVl&o;_yi9#yd-3_S6wlPd*&9x_ntFohN76N z6sSBpOf_SJ@*=@aeSdjERL73bgMbrHuka2MWv|_F?+_0ygz)kG;j6d%xiNdc% zM;UP-5m?rx-1qcuXMP+jXBmeohacV0;!=WEhSoUnD_*FE10*kz1BBrCj2jVz;0V>@ zhBrU~GKPt%fl{(+H)Lh?<91y}4d(xn^KrzN_~X7?hnNz&8KPeMaiauVF8ceX>^KF6 z4!`p`U>)vq3!VX;LQhlC%N84mXps7@k5p)`zt z&Keg{u64&4=4{h7ZlYt|ewS^ug}ZdVWxt#!1#HW7H1Wjyo%s;Ke+1frKu_A1N&8$3 z=I625r!~M#BOOQ@1wOhf-eG(^#OS{*Y`Idqi*9!YaMvNqdSAq{%fFkt93~?=Y;`5r zfT0qsBr3n|P<@RB%%6I_gt@3c>MNaP9|-R?a(s533m^ZP0$!MsoXP00hLp)frqF}P zp)Bb=wgi+Mfv&>87U^V}q(a&P1`_M8Zi$8H%T@TNN(RLu3~Bd9FjQm?NGxa&pbDuV ziQnx1E0m-F*|t^2wVI?-**N>up1L>(4u@7^^o7N7^&Yus4cqRA7_iGJEd|xFYhC5# zab~;Rg{SE)+rjXoYOeS5i+%U_WDF4v1ZL|An5=lb!nH<2&kh)ESE*E}^*7f2MQauA zo%we1_MzXn|54(72%Pa|MaZ>4sCWZsiCD7YkIl;o;i=5?5Ik#~mi&irIg-mb|LDgQ zFb+^CHbb0;Cdl{?mPb7FcphOnAIjBIXha7ko!K>dF(Bcb1hi=>L4XRarNaXV83=u$ z3Hm2E3AaM?Nca$aKp0z-gu5{es#D@EYbSfNMexn%@Z$r$PzDEl*&Ba{mq!`^gV*CTXkd2c3YXz8H6lis4&gs4UH208lo(Um9{T zuI$>DQFcR#Rn1D_Yenbwjz(d81`Jz%oKXo;^aHGE=CSg=yH z@q4z!V=t_8+(f`_u*DqXN&BgR~p8Bs*0!bay{A9z{r=O@e)|_RQA-kmjmoZXfHvP_ z)%JDVKgz*>2n!+b=~1R6qeTN%f7h2*4l>FVNQUR(7!+V6&&zX3c@PZFmA>r z&!bwyG!89`c@g0MaTJjajI_yw==KkN3>5DgP zy#AZ_!G67Pmnx`Vbt-*+w{FC%Rk60H9+bF{xMoax`RjYdn-66M=i51)20(M8t&>n2 zpgCbqrGIojyImV!evKqV(*XV(#oS%ZiEd@j4S{m(1S}k@$;#eGL{|?J<5zq!#t0#8 z*KY(f>u6xn0&j*O3^t)MLk5IuNjY18?dfy65JMGwfyQX$7TOMBJ}7y5Y>3|0mE3vb z*q3;Y7=JeW^ zr`k#zwD*5ZTZavMHGu_fZnkJB@|0%!_I?vnjUdC|I*iq+Quj^#PsJGgPEy%yNe3oBkG1LT%FoX9t;_wkJqx>idA(mqe8q)I%0>%uWNzrG>d3d^s zJ%zFh)SCM9l6%!W`5lq2dYo%ckuz83bF=ZF>mnw-JnnIUt`ejUT=aXYy02Z&!U*vs zMO>CVb;V;XnK@qVU~iJS`!tBCJ@`%c=?OtK$I!CqcF8vc377JGk_(VFCl4CMhnCJh zQy7;#|4xJ4dXR)IO^P4vhB{sgv5$069ajF!+1g`6f%)nSm+-Kes}gXwk73b)uwNKR zuWx=p)1VRTyCw~Z(0ThHl|T{g9)V)D6hq2WN!ynNQ+Uu!o@t=a1&f6RrJZ$tYTy4IKLc`zl>f?E1h z@C|8B>TLOR_tlJo`A6Yk@CyUcA|ekCv*3{9Ewd_EyFz51AhM!_h$xaRK`WD&t$2+C zXcJ^QF+^WwK%d!gB6r4Qpk#s(b-=!IiimYra*UVD&VWbM@}cYl(NN>Rsx{t{YWZPJ ze$UhA_2&wL_t8&L$Jz)9gYJFks^6-ztb1`ju_Qx?lNiy;-zsFqJt&dAX!A~v!pdU3 z@?EE2cIL-uq?XH^>UjCt+= ze=f%>v`0)Cjjgo>;V<%^u0OJZ|-_QU#)jV9tK+5ss{Nnv4EqcPHFr9I~+bD!UrPDptF{XmXhszBA6-$b! zx#(*Ajp7EwB9f$X;afWdyy7TfH8Tm64Shl_oLIz$CFe`N$aud}t#5BK=69r?`=A0Aeq1g`q<{&T8M+1l3mJU* ze~KeZ)qZ=jnNS#gtZ+#oE_t+(#la8hDj!3Mqa=}f9FAUP=DJZ*PHROmFi;}cNLlg7 zs#vgho$(oqKL!o!xAFCrL`!JWk1glaZZy-;cJqRQMzrKnh7tRCfsL!gZftU^Ca2M{ z(`XosGlY?2J;2+o+T|VL5j=skKY_8%seL)XXOYl zbg?vquBGTXx`tMIwOK{B8^#rm%A@1ev#HL7Tm1pIM+siM_vFb9wivLG!S20x(B!Z) zPY!TahFMNw3Ok1E1BjRphGO*l>}K5}ze3S}((eT|nU+7~lgj~aohq?F!T^p%@Veh6 zX8j3~KN;uYZsJqoszQSyh|@tn;;>_53Hj0v8DBd0$RP`F+$490Js9~hW9tAxC@cQ6 zyYKyjf3AwK;N>`fhcA+l3|kGQP&KAs=l_;vG&|B3NpBw5!~zU%{#DBH-d26=O={VB z$sQB@bY;Y@*f>DB@ZDRkp1o_Cl_*PFi$T;K&RSb)GU;tLR+`v zWd;ibwONlaCSg5e<-++TJB<_IgWm)B&<%rMoJXdZ_7y_pB(>cOUV!*mt-C&25`m*} zlGVJP@KL0}Zr6_{5$M)fK~;Cw)w8;+51IsBc^BYxblL8<9&L|%lEA`JGLeQgl5S$h+M;k% zo;rI?4m(xcG%HBZlUD*3VyGEYv4GY8A~w9|JrN{TF zgqs%Clxw38_HTWhb>pSZ}egPV_4cEJJL;GL)= zg~>w5pbbPwBD*$Cv1~JiDDcNN6!?3~zSrO#mo&3}1qW?Wd=iKLQsKRLjNoDA7Wxba0{)=b`5H7cE;0vRZxV1dV7 z5`ZJnbf1m(+>Ijbav)4uv1$y^kN!grlMX3%JFj<9%njAJ`69>Q({xez1ie~I0|K87 znf8k1pS}lUKxW)98mc`0mmXds6KhcJOZJ*%QNdg!(5;!{F*|$cYlJy_Z~{ZqG5Z3p zyBfk{+Jbdquk&)PvR@SQM`iCRl#q9_ebMD!M*baG_Uvln`85lZ{06jrFvo(-97Wrc z8*?$cFM_n9q#Zp~k25GV>GYi>hE%wAOL`aW;X4C@03Y zyvp_d(t7G^y<0{(wndzjU6olHNEHp(OLc;+-9CTH_K8tYzSu8nqei;nq>^(j?hy7( zq~QPM*B0_8*fgbmenM0q?Rcd4k8f;+Gr8UVa}Jj>lX{ll9dF7m(SV+kHjZv&jxW7N zn?W~-Ox`hL<3q_CZnp)`q-)kz%CDHRd1@D1%}lb_N{l7Jt^*u(kZ49R)mVNf&uD(y z35htw%h>$kveW?Sw}9_At7j!#&_EQTnnZ-!Iv32>IJUimL(vKpf$Zet&7V4;5cG63 zwk18krtc%kM$~_RIL@)WDtbP^Y-9z8H3i3U3PlC(&0!9ZPfYx`AG>Vc7AX*iepxXk zM^>QY(O6XxfKlv~uQE?DXM`a+Jf~9@(%TlrXyfKiT`lTx+RRtcetSd*Y`kv;PGhJ$ zUEqgftq6u?tZu;cpb3WMXomk$`u(BRyCnD1O`noX;#NNsz3fAtcfPP~Ck0qtBFz2E zzxG#@omF?_d()&bmE)v9P&AikPKz2&{bKG9mVrz6yrHl}Idl%6T+wfjD6-=#h^E1i z+U*&#m9R9HXKx&>Gk9@8yfJhNX~EMA+7i0F%Z3Xd|4tV*BIA6tV2S8#P~1}C)A>2{ zdHgKJcex5XXWL>Od^CyM?BJp$Q`oDJIWV&6C?U~*1h@S|UK(CDped*%w9m{OP+#Ly z#Uo)e$HRv@qEt&bu=gq)UW+On{9+&bn-Sksz2ahfziwLT*ySwrcX?2MVW)ki*$-jbxN*~7YPBytt#S2kBy1;Y&BBf-bkk>M)T9Igo@0wjZ`PuC)ee)J zAUH!A4%%azFM#-XR6i1!CFs*kw-^bNrN=R)PDf?SOin;xj>^jHgCGYgDj{2c*R!U9 zBP3`2%6ed1)+aZ?hV>3q=pp!n8FCM`!pae;29zgF6h0VfkDx9ydn+Aj<)_ZjnxqKU z5{VSoUNSeJhp}{8{=a3XFH7Y-@}HQb$tZ3MhU=DsVw8flgG~N-NXwrh#H()I?etwq zZ1avgX;k@cnMXGsb#YkMSTU>W*#U%24w~EyFyxs?P zKPk_TzgW!fk$CaL!L|=xwv~sgtv2B(6t*l0k0VI*t__XV7|;nyrj^Z9`!<8zeS9De6%($t)gOnnl`pVlsw z(Sz_Z{)g@Ro^FM(e;=xYTJ#3JJ$X5su?xJ&V$dBpLzdkR(G56C=5(!$J47O*PX)lz zD~HSgOj$^r|qv&G`o96pNSZrn<}d&nj*l z|J8Qd?V3)jB4pVN<3*jf64r%}&+B;Y69KQmL*~{y>n|AlFUs*QkB92KpAbkuf33l= z^YAfweLWy@D&Tcl8gE;Z%j0t@f4Tdz0?^;6O93m;&nw0{0pIquQ?_3}D_GpTe7kj9 zg(Wk6-F4#DUZEJ&Ylre4rYoK}qUdK|dzjG&qnm9__M8PETG|?_Gz;aK6$vva7@9A) zD)l998euhB!N|Y0FxVkX)Y+kc9F@eSAgea$NMkD)0>o3_Iv6>gYTT>F15;C(auA#+1qoB#Z}${te9!z-gCeu?@deV@zsG5tmJW)p19QAEEy;iS!vC(k zZo$7&`L6|-)62_w*5|ZXrRBGA06b;tyjsSV6U4GSmc$%HWoY@T4)^P-GfxHNH(qKd23#T<4l)a#@Q^xc zKSNcP%;zFH^nD#MwL-YMJ@sMsWd_#pu%3JWmu|&AK^D>1KA0dzQc2b*xr(zqAl#(xn4XMOnh_*KYR^Qn3@mg2y_+D)gmxg9$a znKk>k?4<;o9H5|_d`X4R^y9c@-Zk3Wa{>5Gn)M~VQ z*%wv(G&0T|n)&L(B^a5$(n0ev@dTMnmEkWs_;hkM_Y%65`d@)*12b7cDju#Ppqs#| zf9_X`zhm@1^sd9C+<(Yf$__8*zX3tigN=I(gVF#yGoo#TNKQQY3PyJUqp{O?S~G)MijdGfBF7TDwQuRiONv~vhOnu-{ruu z^*^DMzu8YHWf5al1V*%9pC$K!;*>LDrLL0vqJQ=4x$+)dyUGd}7v$%Gojt+Xj@w=mH5+OiG#PsZ28 z_`HzI?)5)8jbWXIX$y8-?%k~+Wqb-!N?apaG*YdgEm~ey(T9Eo-E5=*a=et4TtyNJ z=84|8^El2l)2$Y?e{!K<=>@OXoJ<_zi4p|%DwuB#p$X;n;cT}+k9^tm4PQ;!v&BVP z@~+@6DHnq;B`n~39;`nZHu(8ii5LJ&F9KaTXfo zTLagV-Gd~JNLMEFn{Gbj$>qO^+6feV2@r#`efNydxRa;OlRU7fGEk)v)@7iGCB@Wl z>ZFtn41GkGj3AExYVFw5M-)*bDkPW4X9+KVGfugPsXrV#2r?u1MwmS?8tJI9&xGEO zUoo2@_f?L_6hfpSSvTeT7Wf4>!8<<0ZNy#7w@|ruRRt%qVUf6e`K+jjH<{ z#691L!Rb#@X9&dSXmX648_A%cfIOH20^9jokyQpMQyb1LN|J0&=$jJg;M5TMuVIjX zftohB{{hr=4whCEErOBnO3mK)nhIhr-TzogddrFuj#8UDQ7dr`0i?DAnrWvi^O8SY zeNSp&Q?8wskW;dYuQGM9VkGrZkD>T2J@{C|QWG8j$^^<$yl%2NoXDK>i(J62E!c2I z=xnfJAdj-M$bc(1d@72g<4RA+5mb)`oJ!HtUZiu48U^#=E|6ptQaLAog5+2I1R|^% zGXzq6`$M4zlgCzwV_8)9y!f$h!W|6*lFgI}^KSk$^`N2FtOCsLRzbS<5~OO+m;}LE z`5TbHu?IhpYK1eSdG?<<%Y273=Y_ZH#2DThvG(`qPRZVbO?tZD;4a}-N)@#g*OOAQ z&sI+Q1z8##AKq*>E}jmawdIMg>Y_m%j6$1h?vW7-rmCo1lOYu0^i}Pv7FJIrzidB^ zkeU);;k#Kh!MI4rkA>z%AW-QZFz~_c?Z# zFn`{kd*-S8(y2V_SvJyvPkIHoN^j#rgyd>0d&r}<=Mw2syJ#r5dVTkZes={S?qs5G ztYj>%RyOZeY)fDU>GCim+myygkxes!@3O`<9zI6cx?vR9O^Z}O zek^EY6n)NM>zW8%yioD3O}+bb&1x&z3jNPHjtpF`aAf(D}Qau z(BB(9R0WFKLEVg=$8)}1J)KJYpn7Sye5+INXIui+fgYsRrrJ>+$`Jy ze>GY$3usm5tIQ`$0I`Te#8;XAyUYNbNqJok0?hY$w-0_qXbE{_{44m$V9z!jtB(nC z4`B|YZ1CH}aX~C^>%lKr9kp#PAT%Pokp3SzC!iR1qZmqz8*(!@$tk}3MC(INHRJ*# z?9_BGruk5^IS>8X?zdp}#2+-Wp_5cQ) zH(SpjiJDUrcugHJsu)5I%l&&W6{vjB=~2P{0Wmz!OEUf5l1J$T*r9WgF8Dd#Zkwyx zhFe!IYxT3oO_$^rvo7h~C5~3eo}%3~xyU!ULw-wgJp-`V4>p{9NvrVS-d~K%U9vgG z@@RB)2>mUFZ-5~JQCN09REoTm<$0gC*(}VP(klnRzkQtr;pZn#;`{O)H&Cw+f{XzR z_6tG>Ap{Uwh2(e8thc!>T2!f**SF5Q7@8UYm;F`SC!1JuVz|D}D)T33A5_vU@x?)% z6&2RR@QM`~?(c))o((AX_ycG6taoN%++~^!TEM((qS|<=o)S-+68wsCqfcH$1hyQ4m zO0}5sYx|l_hm0sSyqE1Vg^_tm31WQ>t9A?8d6Wf#wG(-&vnY&n z(~1h>1*3HhZNfA%cTW>-Pu-2d(pf93Ef?w5Zk{e)3zCRz30^rRmx}%=$Os;5=fj4=CMP{^iqjnf?WExO7SpSoxfRmP_sN8wp+n5c{Q&#>7P8Ta!-?M=3GtY7d zvm2UkmnrSq{tAc2f|@F@>dh$^#-5ATk?%5bFRppEi(7BpnhOrhAk&A~>xscAr03N; zQ1$^RB7-f0#@vGf-}bf;Qj#!3Q6dLIt~>DwKsC9@^K3(}BNp;Q+(04mZ!w62#mphW z2@Rmth~lP!`u6kB1$M(yx!@IyVo;R_17mv$M2d${lYE4sXvfQh!{`=&dyq|qLg?p- zy#2!VL$#Z#fTcd?D6i;kd?Z5H+&J3-w-6Ow|_zYr)If z2RyXfICyNF&NRT72zel&Hp4G?eF_YY=jl?fr^H*@p0i5So8RNwYIzd)y8HOsSK9#r zpzr_>%iKs!Fzqd8WVG&uW1bjBR$C9hFOe2iAvjaHXOxBrVr;qbt|JP_gd4qYN?~rx zOsW;-<}hO8jW(nHb%hYd+J)Q-j$fNOSnly`I%w2jSagjb82R|bwEh+7G=-m3Q}$*iVm3wY>B_IF1WU){rYwKJfEgo7{q zNXrk?`q7C(;OT2s-R(rxr&Zj&5msky70%;_HRh2ucZ&53WGUMC3WJzb>Er z9+?PVRY||FpM<|cg0C**D$6eERsh@x+3bZDJBXvi~X4F!a5H?wMz-l@b z$H;PF(P#uO0n1lVSY+o_OgHN%R3>NJKyKL+h)P&4;m zU!LRZ04H^Bm7z>KE}1EBn`d)dA4=XVY{i$3MhO zS1-EVyW_m^7#lh!@|ni|x3Z8pKg2_|mK11BcDa|3W#nUf8JZJP%*0#=K`AGgFJt(pu4Ld8^yq}a?T(8aTN->5te?btyZ%-V>+iK2?* zKE1$-bJ8RPtFE>_lXAEqmaG9LrLzg#Id|vP%5)}nYKd?gVl+a9DVc$Kc5|NlIgm19 zdaK(L%`~QC!rD^|>An{L`Vh0lVJm%;ucgSRx;372V(hrWl!0y(F4xgywO^KZeOuG> zix=W%`WDkw8iBUKs=wZG#oYxE()5$-mn_?1b`GVx?;&Rfi#F+E)tHie(!v3T7hko3G)d&SC=h@X<>-FM@{uA-1*@ zF-?x)#JRUtWoW68Ye>we`HYETE%2OQs>8uTXvUSERsTh5nF)}U;tH(fh5Jn3D2s6_ zV^rN2Db;WC+BDyf2c_lG5g9S!CZ(fKQBaJA1cl|c=i3EHhtq>dk|nL9IRaNmAc}da znFRtBWG%7mLW(E-IqXdr1ZovMuW6g&tt2-~$V=nlF2CM^aRW`x5hUs{vAzWcl&U=! zE51x9uK9ah#A2)dVWtYt!&etWA63;>Wj6v=c2GUiE9I zFS5TcakTkRUWQT|EgE)$K1!@FjJmF1Xe2Q}%dLNGDQ7w+V!ux+p_aW$kTVTWOcjZZ z8&>7{hMLiXI!N_UP>$TyB5Tr9m7S+y=1a*>T_15o zR4dh>O8xr$4=dvF(`IR254Up%PT|(Zn+y~HivURs;y_Mp+f>OA{D&2>bkuuUbR$Tr z4cnp@_iNGnuP6t&>#j_F_D%ne3O5(idp58XA;Bg{kLfRXi??K=DPtq$_)*swu~WW7 z0Rp#MR}X*_p(|#82J8%hvX#a&AD3|4&9oyqB-sCCWb3&o0e<+eNemj0!4OlS6Kq_;0Cj7X7tjq*`IqQv$in>MqIq z=0<~T^i&glgrTU2odANv`OE(o!BO9>LKr_nNpbfgxWxOhQ1d$ft`x%Wtn3yLp}4he z4mlr@m;uZF_H!TCw?~Ouccc1Zs;%hpLKXMrF~M%51Q3zis)Xf8JMS}GGB5PQgVG;> zR~2?=(86@;+Jce`Je>Ami=eA=hj5J6Kpg)`1Y*wcC>$+UOUog8Vq#>vtio}Z$T*Rf zElL&9e~req)W3ioFNAYZ@|%4{xjR$3`!3g~Emm=YxB5Qg85P63No%e8l156h?`H__ zYuL_5v8VJF%nwRU7tj|fn=gd(7<5!b_EVS4Pd2hi1HtaP1$pb>6ANWe(7a?@j+A_B z-cP~#^I-3Jq}D1~Uu4p5rDVv)oraCX()@V(3|{dBbM!poa|qPiDv8Q~M$^NSfr|g; z1<`AX_VD{C0a#MQn`vKJ>TtaDCQE0i<#?D$XRt;l-pdUh9*qDXU^285KwZ3LX^(}= z=)7?L7Hr;xg=nY4Y-3#68%r0+n}fC&VWY>NX#*C@tBX75Vm6PyssOIT!Zf# zv=lRG(ZZP3@osA5!jbtZ_h6eHkirgHMY0SZQ1cSdeI#X z1ziBy!uOqD1_Sb*Slp-XtRA9+ZECh6vMp_R(e%9;>wlj6qVUy{Auk2U#U zE1^Kx|3qDPyI$szrpFC|3G0^9s|Yi0N?i9}Z`pBL5fh^9Ew`C3A2yOJdQnsn>Vqoq zG0N^U9hY5*^m(`1RC&$Ze-7~L9u%<_m1eMFZ#iar2z2iPF6RG;J3o6OFj%O5@GF^uJL=|6pY3du5s`?46+?K9 zQ2^V5`+kq&PPKwn_%V}8G(`qc2MJ>*k=m?;qJh6Wtg}PGQyDg^89Gg%MZ{DHEfT)u z0DtbJ^Y|5;IKN3sidY44uVR@472$F`=f`84K(~e9mvF8SO|IlgA<=^1)x8|fx0jvl zLcrg949t03ERLHD3)a!9PX(p6EOp&z=yZX4H|sl{dCb;@MnY}W_UhtgvnDgcvRg|2 zc`avSlxds_&P3=~sf{BxwED<57b$*KAao*dd=oL+oLRtl?kf@MI49@|azNw{QdcF# zd2jf;@Yd6#w6p@;1}@Q2i?OU)dtK}jk{1u1iUW9;8#6mQ6yN>clY8#Bf$h($S%1xk z@RU4uDG7IQqqmA8((fJtH@()MNK%5+zL8os=S}SfN z!RW7~zk~>2j@m>M!q%~T>bDO8<ky8?2Iw_O$Sv<~$ z>a89tT~u2CURi?76KDkfwFG;EXe{t6{={<~q&v~G{N4XOyGeejhv*cag)1q>@F2vm zLj;f};&TC{iKLMVNw$xF9jo(ccJu3WWR(w{(bx+nKY%t*VL;29o2V(+31QLPV$C(c zDdhPdTWj~(Jb4YHLO98opv>@!c4IG1ZhwC*L;dwypH3@))Ni`b$T zBIgUayG<{h5 zD3ylo=TwYgo!8>-T9I*_w7-CmveMb!QF-`XVh%e+65siOUWP?`Xbi5um{iQB3(%s* z(xp$O^%VX{#FFLWo;>BW)g9y7H>4JcNIL+9fVPe+-Axja(j+fAYWmnZRDV1HOkYZPd51{09} z2n;uZY=PPVQUx@_IXfqLXK=G|oF^1wMQx1sNpGaQEx02woTpkpjN8rOJ6K8|8&$N% zyxyB97heO~ZwV_pir+-T^^&{xo_0|dxF8HSkxc`W<@g&zNR)m=jsuX&uHydgKrg=G z5~r?qAEe$Y45AMrFR=T?5JV-5yCcXt{Q~O3ALY<6dTu(gv4t8@icLs`^Lm3 zg(JU9f9hf2Rd8eWQR}{f_~~gGfF+Rj^Nl&Okl>MYNAxNMB~t34Tr!f3I#i;WG~SL- zzU%kR+h=Ox;~ry2T-DF^6G9(<99(2UGtHBH`hK1#b=f%rb|m%*?49+$z1^Z&CN#`L zU6LYFni?bI;X(0Lr4m>@UN`Bl04BBNXp1Ioo6KSahyp+X*;k13P zgIGUSbjl6$JYzmF^#}~A;=u4+BYp)f(4~LjrHv8z$UUD~Jq_gec&D~`%4+c{Ye+;~L9)3_qr1^t9IgPMC4K}Ty}eF)^>+ZYOZ9lqbk9w) zRK3uRRgXpD0oAt&eX*j8B`0{bpy#&5$A(sG@6X79aDXnM50=Ydlc{|Hm*k_Iv#Omd z_Xk4I%Ro}|y?A`VBZTs++FG|G z`B>CQTqKLLdrvL+DS^HxLch1`Cl18U?)0sh*L(;EmaCgn zMLVQEsx7e^m)qG9FG}yv${O?4LWt&3+cksof>TZ{bL=u76`Z0d^(|Mh=&Ny~j6xa4 zDSXf}tCBs7CR~<;%6k-rGrZ@KY?+ZZ_Ujl9=Uga-=3esjlX{Dky|9+ATl?y=ECsvN zYvo?!lhV%i93s`dY+rf$F3jPPZ3ljglC(FOLNH=Le97%(mc=Fmsr*F{&9A~Xpx8^S zGVo@Pl$mCeCz)vGmN7t$D_N#dt&->|gQ{uKDj9L#oEnZ^jN5T?l zR|jWbaY6B#g+#KJ;#=y9^-J3?{fZ^yL-De%q=2!M63z}1MS&UD*n@}Vn}8sLD_dbspvnvsspW2zGRX{hGyTrM5#0XTd4`&`;*jW` zNHDaEv?{Eww8jB);Hx6I?jxU8-aqc^o^x{T8JP%YtFx-=t+s_r7qEI21Z4QB2wh%p z*KJDGm*OjN*crXw35sy?qWFt4EY<#2>A_6#A-osR0|n=X{gB4z$zwabe}+n#&|OQf zraO~>iIQCY`&%54F+A*@QR~WI}{sROwBfDz1R}lO6njBY}L6FA8P8}Nz zIdqyUS;v?qXF@7j?XL3Um-;R;>mWs*XU!Jbe#TUQqLOWhNtnv>cB8@nQMXQNSwkFy z%&7C*^C`=~Ye`pexuMk{_E&c|z(MQm>bfqRY30kLmRLAeWJHeB9<-cg6t#O!>M7b>sClmUAZePCV9^*1b8E}p7C%|4rX zXF%E{r`Ov*qBCxpIUb>|M$9AYMc73O2nm7Gq4pqH%A=m54=WLaM3Fb@pWRd`DJtF? zk##iV+Ppe6)_`&#BeIle^JbNY!$YDJ3d11uH`}hYVR|K50d~B_5ObNT%s93}|?Ilc29HsMTd%t}bxIGS0Fv&6Jk!z$H6yAfuZ7S`lria7 z;UX{U?IyA_ek+P*%=)$f)hVC4G=1t)El0uqOkXezy-=P!-T61p`OA+k-FGjyaanh1 zdsk|%mtE&Qb8|5JAG)>UARj}Q%YK&f1q=%!_U6ww@)rK;!9o>+h${)SX_=v=<89hN zvMT+V42B#*vCO^xMPcXc@^fAkX(^zpHtA&&-k{~ep8&wu8(#X6@WOLoq81Z7!4e>F z!|^J5A|(A6z%kt5tbSJa8{zf?8XBf|Uw?wk29MUW+E3vTl(`O|gbuZEWr+@qd&3Tu zagrZ?c&tSPiFN^R%Bss43$g_=)bpMGa z@D8}PCRiWb2Vw*EcB8ITrZhZX3JYjjT<_qYTJ%>ssecEh=%8amm7c&7 zK6bIiTPFP>-{s=B_FTUOnwxg0q_q~Q>;)~l!kXd$JoL;`zz-*$*J$w|n*!KXjD$O^ zQ3qj+5>j!rII>dTf&0NJ?UmxfWX*iC-tq!?jc59(6h8X{Q-9MAS+wOt(s4Px@991{ ze|pg_Ecmf=x|H#MDvrWEfrm z5^0A#{e-G*gDx{2j?Nf1I`0-Fc;}a zke!LkSA0IH$C6qj*Q(AR66SDvsZIoN_;A*nDU`YD75Fb865VfG-g{nk-@1va^z~Wto{g z<->19k-;(4k!NFgTkjIzu@D~7i|(jzBWgiq|Cd4gazFC2A#in#YP_!RvEZKY*3_Pj zie;TA%$Ug+EEuYFI-n1Uj^?gwXh5SPkyd+Ry=(O`=55G!6RL$2Agfukf$#HjiWSF1 zXe8?Qclb?&>pbB48X_~Dbn$Zr7UWJrJ`8ANsF_{^bsKE;0qq zO4@)VJB(O?Dp#g15DWpYMXWdIh;yZt`Q> z(PiAdwsm;rDC4)NAlC3gYH<2=&&LZK?2#YfOhSsfzsoTOowpN-FBJ4;0h2^g7M>?P zX|3YG5)x{Z6hjf$GuXjP1K*c(LZKq>SBzR8V3?6I(T*=j7oPK$wJBa+FvEe^*)UXg zb_xA@n@L)8q+XaC~{8l{ggxWyovtM-Z9tMfC|1T zUot=0cW|DilkRN;($(6Em^cnk83SL2wuHx#i9jpr(Gwqb;5M%=6u4_jlmHrSRN#_ zyPzYfJlFBj=;2$zJ%dUpiTuJSGH=t;Hc`IWLp6^O)N=fqKiPw8i7t7$sA7<|gebL?T^%|RbQ}7Uv+UrYHU)x77Z}}2j zmdspn5*f>-GxCxSX19YXH^p3RD4M0b;E`QlK!$=vveRlHT)ZJD4Fky@V-;4t6cw|6 zB)^9$%+96!GhzEcXDN9%kn1bg?{k`G`b~Gi`9gA=ThXsQN^0j$V?t|e|3ACv%2P9b z&YMYOzcr7FGgq6Yjt#$GrUTH?yGwKopv9ravA#NE zS~HJrq`DLv3wKkICkH9aE>l~!3z-~EPDWAuhPX1=-M4teo;GlG6s_;pq7z>{JG{80 z6a4kW(H0;0px$h4-DxwV@f^LKR=fE}^qZ0#rY8Dr(4Z+s1Na}!ud;fznX{Rm_BR?eOF%&ek3-&HzpsApT{O{^ z+Cnb{h25iS8-9sB#%Q!Q&jpK4Ls}_Yv9n;aXJL7u{=L;|0=i}!^n@rWah><(_$dP^ zSu+_un{+T#!oLl^XeH|yWenrCt2$6)&T?Y-8iNF3VpnAlA%C%yA`q+aw- zrmwsaJwuLmINx8U@Gd>8YUiP#JAiUJw_AklYLaUNj>^_qk)eGr-(@d@Y7+o24xQDW zRSFISN4(ggC4RNeGSDDicDv8J=fNSiS$r6hdlf(q{Nqs)$a3@7&2D5O=k@BP;tQCj z{%i7?=c#A~u&lS`jHqwhgd=of3mw(>K{C^X%7*wM_N+&vNQ7CY7^(BjxQwdN*`E9W z?SzS?MK7dlr_hjI41^<@9AuW8EGI+{HX?Xmx61xA$Jh}xre@18ek$_JfZ zze&yX;#RCtB_t7a-6jp0I^b;08-CsVsk;I-f~7t8c6M z3SS-zHl@M9Ikn-O+$%`{r#$y%9rN3t^3$f*VY+=65zqixA zEUOy{CqPKp*`^vGn+U(2&@Rd<;DAnb`+c&Q7&K-zWS~d6^(j~aqsX=alz@3ekpB|i{HeivmPW? z)u0CJZm-OEvnyKunO^o16E33EaxsKGLL;mQA^EgeeAgY;?e4RTAk$L3ZwwNoc4wdg z)haYAU^gJjTTKQo0vxt*qktM1xO(O3u*>jSYlt=Ld*YM>Lxov z;X~wjFqvsx>OKm7azFud#EgW$Y39wGpGS2@T?9|NH*rCvEbQ4e7AUy%>r24T9>I&t zt=EO=tDp|2Kb)=QSWl1JhMNYQeI|^_w;kQ{%UI%?xm%8LtlLA*uZiSOoP5x>51_z% zdx0qF7R2ZF+P4ee;~>gmc=#FMQLgu6F=I}Q`4)c=&yAh3|0s!n)(&^gt3r(FgF&JL zZl-n}6e(<+(#BEqa%$KjD1fUfS=b0NCvSbeHsz&X-vWdx`(Z+ir)2PSpt9UkO9?{Z zfg3Q1qLI`buO1V3frjtt9c1nQqf<6&@SVZ)7za>dQXO>h-8@lI&SPtC0xIr4pmjDD z^7K*BNIVdssV7J>2>9Rs=tD3!hri6R)A7BbK&vU#rfes1{+dQf)HZ=n?-Undy-MUS zY@5VqnwH^eFb2&7tbT@o87BsCYQ!;rio%t3ETJ+DO4S-by2j-?X)`7>kdqGJS>iOa z$gE#C{LU$qJ&*`Q(Ob*lII-o*`7kiEONbW?nkSvJ?Egp1fDu-9IVa#$ZxEdYvw^VE zDX5yub~^y6;c^b=8aw9%X<>3sVz`e)6nr>~+lUV@}sja&sJ(+vlygK7Tw=CRx0MU}JJ=mDS^MzT}u&!(7Eipa68=aEY z_ejwf(qW$?TBx=VE8{4G3Qnd<9p~SN@XaBji%QeDhNM;a%a4C4QOmbu9wPbZ*RV^i zC}~%%c#O+=4%#Uv0&LMNzFC67UD@qVsFOI2k0> z33Hh2>#o9J_$!P>VwX!{M^B7}my08h4 z4-(nzJwX@D)(`_a%RY~)bXTE{#&qY75Z$9q^L3z7z?+(}Y|zh2yk}ZYWhU01aBxZ! zBE_+ZGje%fdV_HLQkiE9 z7}-b4&xHG@(=FGu;hYB*kg%=6>610@%bbt>;@g(t2|M{{B2PQ6a@tIW^+dd4sLFx9 z$b!fRg!U3D6${k9UQIB}ARK_AX>MVeagnVgKuA_UCL_%qHl_~Q zd>Db$D8`9OH_taUSTYmQYtp9iy8)S+=<&YQj{wn!_&YodX)itdHE0YUFr zR2=ZsJZ~RrJ7z1WYz$9VsZ6A7S7Dz7EcKkM*cI-k?~1t-2zZX2|Mr3d@bit%MS8$i z42`X$*KhnZDPz}l?xesOePixYH1v9QxArkdtcg(+&o*SG-p?URvI3=J!_2~^%xQPV zvbVUM$tt#>0^qrB5+~N=Zm--yNqZo3f7?}jZVszjxR1y=Y5^BDUm@YzeYDRGXqvm) zw~Bb80KF4>g`{sz5E9Y|4aFV z01LDv6Kz(JxRvCBgYm0{l;F=JUEg=Gkh@;MD~Xh1McJG%NjL0Op^Xzr=3GS)CP6Uuk$4m)`#%p=h zP#w}7tED=Jl1E7`0|kIiBM$FB*ZnR!q3n9k3un1MJj)cSbrfYd>x+h;m!Fbk`|bby zv^j}tAUCQWG0^>9U-`AdrZjYATa6Qu9?H)%`ANNB>t^&AbSsls_^YvS)%xCt&tgcM zSHCXXhn`a+n|nNdTLyBo4(+gs023NPZ?jh%;Ik#`eCoW{(tT3E#!P9>rW2H>h&G~A zyKG__#V_0{n+;5g3-X^#f2R1-1tvf1CYCPl>gX$BBK>=FRnS=Pog#^(+o^uVN<{nPSEKbNc5`%B z3R6!AsgH8}RxSjzH=4d4Qk*h`_g+Y@a zQk2OA2*F`6#psL(yXuf7slp`qW#xlifK27DM`G^C{;ju_*D_e(v)t>g#AJE(w%YcK z?_VNnHMRwjw{O9i2`CZLQ@Biv`EW+u^&et3w@w&esB295;nYV6sRj9o$6jvZ$_EG=77in0q(e*tYM#_iL=4J8s{JeNUA_FsF z3%YK(watpI$Ub{Gb4ac5(dALN2R7G+;2a31A?Th3WX8J;nY-@#OuL#Ju9`agxS1CV zAvKH|LAuAW9JCk2oRN{jO31@b4~%LI6%&j}HE44#B7Y;5kp#mO?S=ajS~hz6w}0o5 zJ~FZm^Ev{+s&gy0DVcBenyuYyx0ib0L$;87B{|lz zh+tAk0nul&K-*gY|HwR_G5a7m{xzy|kC;fSlEMF0Qg@<;BmPCbHS{TMQY`_T#e|P+ z3&A^JXjYOdm$3NKGn9+;+p&#RiZ(SKRQZ^ShRdFo$Xz<^U3 zbC<7}wT9{*J*%2O2J-r+E82Y@imJ=Oh3zUCvdI*^letThMn)Rh5fK#Cu5f@oEbgJ6nzM$ilwO1Hb+xeM+;OyY$=qFp(`Gv2(z9D>068)$peWDX$tyzz zH;Ia$(m+`Nw{Wl+Qmngds}`{8vJGS6y5#QtUe4xddl^NAS$j5;ws7=Pc}p-U5Zf*JfKv=x}@Gd+Gz84k&|h6LQ1a{ijlB zn0WoWhK>cVx-UR&7;90=%b7KdBMag5r(7(E0L!VwUq)Qh$Mv(6ciHu&S9(lQ3%Pb$ zkd^^Ei61($ip7qDZ&UZIrSmbN_vBc;@$A+e7JGzA^U4uk2sKgayS2?zR_Ak3UhFv0B2*7I0ZL!awNB24FxlVYuzVdvR& zODt?KEg*;!C+l-e`6M_qxybB|5cy^J&&w3(nQS4`0flX6pxO1ogr*qqo-ZB>gBl{I zlPgDcf64X~eYRm3#wBJl(WIk&6WLn_3)-x8yc7U<#;akOilzfg4xE(U$G!XcD%Id| zWEJNZhT}x1^wei=GEows+wCIBB}H|X(+`_AZK$o}OrFhLLnGt7I4ujIc_}Qng3Gwn z9hw@*z~_7i2#oH{8QySyw)+3q8X$_-WA%csW*=^bGL;+=o%Dq$P(GH+aMk?`!fm!> z=pXB^IqOjRq?${}`pdx^f6w`LDRi)EM0Uu&Zl^B~S4kO;xouQhPj+1!7hf86Ax9M@ zMepb{H+wBRWKZy{f-W?xugdVMV7VTu`0?HkXr_^3s$qXHnvl$0nuhdb$avPP>Ev4j zM6ZrVc-E|%f|~qQ_1YZ*tlmU1=AZ)k-%^ji+ldUe&5;IGAyHU=J)X~0t<2)#Ecngp z5RE(AbUN2K|=9x_Zn{IdYhpzJfi zD%8m+f{rbW_X2zLNtHnI)knAVxVVRDa{1i3C4KDw2YgohjKgr+l|K$=9P9!iI5Yqr zOh(Dr-k>{_0~%uEQQ0e>JP;*OPD{u$XdK~uNfndT!)c|cPe)b5LJmyfoWCapL1H$p zGe8acKWOVQqpnjHATBa@9`~V*{eW2dHZs|V+!QXp07qOw<)OZ=9omnrYAaf|y%bhsqgGUtBq zE|q9lcp%(;2bD|&QsYcl<6&cy1^cTTwd6GAlr-g8tAD-%zCB7)cUD_I$OC!2);3Wa z`e_`z09aPV`{_{`mka}^UlG3VR74yK3-Q_?JCH0vwk|()Y`Exu_+Q-J!NTe4Og}P% zJnp)S%M}PV|7G;jY~VZP$aNLgj{pE46_#lupz$IF>(hmHUp#r~!1-|r*<1A=cFl9cGqTpd2;&o?25~t1@uFq=fow+ z5}f%uG2esecJ03ddIelqsxJ-}Snt_qEcf!Q=pKQfbCh6nwv-)GgL z{(3mnD}im;4QzUeH1+jW2B^pSE-TtKM;pU))$q4dAxc7ZK2y7fkHf2#^5lvX2Kv;> z4I$+;i!}5J@-8-%q>)XAev}|c1SuKP#hPJg9r&KW{vf+&B7$IO2ND0^>t6od;CmPl zfe`uc{2b|DfrNMp2I0x2f%JtUfg*@*+3{1g61By+5E8%y!p~>(!&BiA)gm2WkCZ|r zHwT43a1(O)?M0-(p_m!WHqieUrI+1WkF53;Iq+9QXLs4Yi@=qVUTc%w{3 zK+mIzl^=1AhL~;y14G6U)@K1UPNhpW5E4r_w6GTo_n0OPyt^R0Fpwx6Xig;rmtYAT zrhN;g@f-0BSeTBdS|SoX!VnSd7zagHIDZ9X1q_7A@&TT(2pf6D2n~LH&@SvZ32vZ3 z=8&pvBszqX!Jyjzg!1wX)Yd(<2n0or6ULhIj?psCB0~MF`mO!~dFY25(^F9x8%9FeL1ox?zWQ9wM|ITU#^-qILEUn6KyMh z?VffEXodlpr6P#IE2HY!FinJ^q=R!K9wB7IJLBtT39;1u41|Q(<3yU6OeihkUlQYB ztKib7Mu2NTk2>vJ;(rq8r{3ArzMuO-Dh;c=%)dEU2a zQ^DW;Z_Q8`rEb|#lLqVrW-c;_%4Y69jCso&60+Oh0R{6dT4Tq<+PK`({~NpSX(u$F zAiL@LLrA?C9j=I{a34YQ{%IJJ$K=t-YRo)2ydFsz=S)~_8RIc{6vt%O6w(l-`?;Dp z6ae0h!4n~V5*s=jFOG|U&nVDSJ6cQ1zdF|I4$uCYsz{&w$k(Z!nXvxX0O~R;AL(?o z&~FI246l7?G7LB#^gJW24dA3sF%SJeot*_!m2JC*K}x!jT680+AYDp{$f6shyTL_+ zfYRNaixd%%?vzD`NGt&t4bt80hxdK=H}ida&+M5!^UT~o;kobYI?v+(t;P+Ro+2)F z<~}Y1DD5H132Hfoc<1Lrje{=8nU#fpOTlT3FXeIUkMF#yRmq#quZ{co;pDgl)XKXm-pUiwB zIhWRBwU5@8>@%fU(j{(Z@m2BueC87g#hS@u`4&lv8e670iWDn#G7{S=NYg!^9S@Nr z@=1(Gr2co$5ZHG$Woo}g;uTXh`tz1#9J^5hhG#N6`;FK1l*?h#H8R8$d?xYq`lvG# zP06%7n$ytWe+G~~JgHdLjw z319oa<+nZl>3%?v1g2i(yhbu-DedNIvV?uA59U6hq8Ec>5^T?~uzS-^_Je;aO_ zPX67oc#)14->X#VnO&*jC9{=PWAj7Cfb)!Q6vqQWZ>K_$v4?_1FN8WqdG;*l<*(;K zAtlPx7jy_Ul95Mx$??d&+Jjkf`HllbUmYcV{jnQ)448BZq>`b>#=b=dPr2|;R<{KG z9W{f0A85s#bp2U6u@_QvQFbX3GnfRz>DyC8UDRIIz17qXmSLx71i8bYRaeVT-`7EK ziQvTJGy~H(Df+((X;kWOjA%&F7=RIFKZaevidn!^(SlTY8;@^Tzd7iv zq98;|#y*nMOMq%>hZ~QV0n08GPc3tyde6GI6>%_pEw5EX{Z_imoS?%2Q0x{Ms=q^P zkM7$Vk~5+*pLw}EzGlI=kNeT-egQ-4T*kMim8A)o1np9H*4WL}=>Rvg8Z!pX?!gjV zTA}z}CNEY~cWXoy&{xTMF7)|VlF(=dvcJY4WGDSA&?MxXK>#HYSiDp?NMQlmFERXV zhP*TATiSxLxJGh995}Wjg)-gxorS87c+wLD@me{+X>j2o2wmk~^lgXJqWZS&F*Ktp zQJ2mJvF23U+w-NhB?K1Sc1b0SxL;6&tBGVf#Ibk<;o%rfGS{Nd^UACT*{4=%a**DF zbr{D@?F1%4nyUJuq)xEmq4IgUTkjKkJ-qy4A}+$~-MS;vJ$%u3IGNqRT;;HkKrm~l zjOZp$4m~>bYsEa%Oyb32y`eTKRJT>{%WfXwP6`CZWM}PBwJeK$2bUf*mK$5S{Gsr^ zf^xRSZDP?7&CK%L*DdY1ygV2Qv1by)W%473y8wgGbaIgJvzoGxBs~_Jts}cgT4`^u z&@|JI#Jf1H@*4jP(~K*LmoHfRKUkOkjSmfPuqhv8!)zjgq)@-JbP=w#Hpt?4-uawn zY9B@x=^D%;Ygw0usfI;Ir<#<3p|X{NQu@B#t>!*8s4T{pO;#Xthb)S4E95Yvi_QNk zvdvxoLp{|!=9R~ggl$LM?V!xTczR%Z6>=K;D1oJnV5Yr7o$uvQ+_y5-o7Mf3w`!n| za!j69K(lbpW+zr`O83oB5%Uae?*JYVcb=v7l4}wErA@>j>0#jx1ez!9R`!p|$h;JN zD>wA*rU*u)%4iRixkp@{*LDit%ni_p+mJj;f3%+R{f#&`BhraTe=+o31@}<$2ngg| z8CMzS|5D(E76#^S6*9et`OA^p#Ib-OBOz@-Oa6uG(HAew@*S-3rd!hQXFS_q=`4ZaJbsa{J%Rr?Ak0#X40zB{WxFY+0MZ_j zfz&LN$Uwe+WizNJ+Q8g|*^Q0KTkj}q2#&a19gg`V{>_YWOYSxsK@ovVa)@Vi<Rb|Gfm# zMD=d9o(Xql92Sx-;gGfX5gn?fTqu)e!Uj@;n80Fri+AyypmhwQ|7?CN0_}YhLY{8C zh94~4XRpcZNRqxkIxEa3Pf$TWX!cinu(NFZ2&MGMifBY75V*O zGPkdL!$6`=_9=28-r_LudW=9w&jPsQ4~4s*eNHE1R0-QBSC_?! zCfC{Ll~$`}y4hcGPT99nm=uRtLr@#1t0~nQcSSBp?b{D90nt_%%|Bd*4eT{6RPzah zdF7OCi+T&|`@7#^_S*k59#8rkH^o{|oNOlPA2fp+wk-RUEXrC)=djITdi_k*kRi=g zSHDP65wV~&wcn>r$O{mJgR7FG}0dS?mllh}&K zHO$(_fQ{wxXV3t2o4;Il-jqpKiJkbf^|V`O(qt>&&*$^=wd7I|K1v?>6_lskt<@$T z=#W`Vuxu~$9WW&%)uZHO#9F;INvp-r1;f2Q!ab%nZ&N6)TN z{G)J;NEb;uA zGlo$-SldLkvSzlY#9?|)s63z_!DB;`0@o3e@cnY{#rUhoJfftt%b7zvueTZw?_L$~ zuMlN+P<6|il1dr0DTUA{ly!RwWXNt<3j9QV%3!1bye0X2**4aOkc?9pWgp!o*&0Hq1mbb)oo~sZ;H;zQV7V z*E~T>2I1%pS8Xa4%T?&LBOVOduDCe7 z*(fNz#$AETAR{KvwV0C*y}(7?i7M^GpcvQL{8>h;MUh7-RC_KY{DJ|HY^R(CpOHtk zpO&7Q$nS2{v;k4pD&%K+3#w?VDV1IgB>h))RsNK5LWKt}dr~$c`7o<8zLw_Nu2uChhl%dD8ruZG+v#p_cGNJ&8G}#fN4z z$Cb*YW-m+-wDf1XSWKaM2HXSfTMd=*ljt!@BHWdX-9mw(OrkmRVN)AY@D8ruA2t4p zzN^eov~`Y$yZDxf*k`m$sxdj}jmk&jiRp*8w+G?JNF`+7C4} zAN1?BQtUBJdA^qky!@X!6~5Yx^-cTJt2)m4Z(fOr)C09?yrhByeA9)(ILzF- z`|`5YJzrPmFM`j8cLoJY=4&qN4jZ*RG_L>(>#odM)Rb!41LT zjl?!q-G+l8;ful`MLaF5utn`P1>A*q4+vyisPD9EMe)gCY7D@M1X3yLHSFSv=PT#T zeY~sMW;q_0EothUwCOjcYx~rG%#0h4sX&)xmq5j($)Jr0u6BGmT)R(2L*uLLB9SFv z;!cZf0hN61Zc0RK>^iOx;eFjiVHk5AMU$pWGNd8r{mbxk5~SYFmYOyIfqT7$BnZps zkF^XATrWa<=7u9_Z1$TK8=6t3GVn_IX3%7EVi2%Layv=fjGgyfK0qu}g;0)?L=G|d zb_<8qVNFv!=Mbh=24od&Wz|d(E|9pt!z#A3ZnBdS13zrZ^;MkJKyRXT_xm}H+-d2? z$zlAB0sI>iytropvEL=e7}`o4+2TZmqI!oOdZz509OTS6LC-VK zywG+isrxFB!2FZtU*qkNqBU`(-;q{f(AiB4u4jr~_H>*6;GR;js}a4aH?1@Xj?q=O zDed!t*J+1F@&mQJzQXTZ51{?3+vb0Hse1}pOxiZ|arOR;SXNDg22Qz8|GZU_b=N-% zg+@DozrLc#6Cfqm0qFY&zX09cSTcX$((5Bo zn$%lpcn3IS0=2}twC*~#<7%tT*&zX-QHiGXrAf2We9T{$zKZwEZ0&+|%xb=7KD|pK z%(xjfXM1xeqJ6wg;{52Vq1M9c4;ICeSH9Qcx>X4{bi(-? z61uouknn+K8TL~S-|h zVSW04y0(`zu71iFj{ zv|M$Ma-R-P#FIFzOi_i12A7&zl8W8n4)=KQ<~dp3-Kiba+Y+~i_^^2v&wRkwMW@xH zkdq`W7@MHQIhffDZM`D&+=O3-%Jeq0a5*n;B5+%SgHaPV8#sQKy_jWj(SgU*hY_r0 zA3?`AqeRANcWFJ)<>7UKUBBwU@Ve$gH9Y&r=H!v?iHJYnk*=c0+ir#~38*^8J7&%o gAms{%x!~pGFSsUEAI)&$d+zZIDvt{W?J$u33;Xcu>Hq)$ literal 39350 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 diff --git a/tests/testdata/rang_6.RDS b/tests/testdata/rang_6.RDS new file mode 100644 index 0000000000000000000000000000000000000000..e9334d86fa4801eb6dac34b7a229c73c5e23641d GIT binary patch literal 4470 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 INXfAP0F+sTf&c&j literal 0 HcmV?d00001 diff --git a/tests/testdata/rang_mixture.RDS b/tests/testdata/rang_mixture.RDS new file mode 100644 index 0000000000000000000000000000000000000000..0f6fe0df7e11e749893946bebd40a280097b7058 GIT binary patch literal 556 zcmV+{0@M8;iwFP!000001GQAqZqqOnb(6Gd%L)_y0iHpPl8y&738aY$2?+@_Hfe8> zmwH*X%n5PQEj;na&+!3h|I*;txxu#52_%T*#J;}w+~a$0d_F}8*~qahWDofi4bM*B zEnackoG&JPjQAKJN6g)vur%2a!~+zwlU>Kma2-Va)i~`dMw?OGV;+4tKH97sgsp)* z;{h4FN{euX3u1&#m%bk?0)OELGSr%jUCG@wyeCnP>EWSdFqMvCD0BO9^F8`;{}YKv z<1&mA%vg(RK}9}&{QUkrD&QnyS(uT<*OZ#7jcoytk=A5)~kV&52dT^LoQ;Bc2V>CN6H=h=mT^rN zt-ZGW*TFw)^c`1_=DsHhb=Tv*QuD6k0`I^J%)s)Zq(!+{`kw#NI4yLg6X68vIc|&d upa_4a-%~{nDL?G&HR^<{VmbN3x;8U9)=GB?=rkOg;{5`BZJ4061^@sg5g1+o literal 0 HcmV?d00001 diff --git a/tests/testdata/rang_ok.RDS b/tests/testdata/rang_ok.RDS new file mode 100644 index 0000000000000000000000000000000000000000..8e7e0456cb4f27c8786c9413222f403fdfa453ad GIT binary patch literal 897 zcmV-{1AhD;iwFP!000001MOJNZqq;zb`v{44QYYCK+j0A@+W93fvBjEiV&^(BlQ-! z@iwvI?3!ICZ8&k}Nq7cMyaW=DfDq!q88xi!9ml(IN?R#~BBVI$ne6V&H}iRC;-f`P z)3TbL$!J-F-)hF;!Sl)**R61&$gdo~7BoG)&r`&RJ46~^kWlMhufzCwH=)bD+}a#E zOqp3`*z#DH_$}M=k+Nj5UadDO)f)eB>0Hw?E8(w^FL`D5oi?@b#s-+t7Nfc0mAKC? z1>@%DZ;ht`JlP$i?OF^x&j85Xo&D{jwhur;(N|acZwOWaWDgIXMV>?SLhDOl{iepq zSABd1UmnC2(GMiZOV+h5aa;0<=d}C8MlKjPIu7$G2n^BTMCdvg zEE+xR#M6qjZ_%DjPB9p?oepAPu-Ntcu1|=og2`_o4`CZj=ePSFq5kE>!v3HW*!cTo z1>=*)t97$hh5S9Z&P|DLQZ=jQnz_Dy&5abVB8mZ-N|BhPR9VcBh_xi<$@CI@l}J{M zbQ7xGixks@6SkAI6RITnK$W1NP$h}D9H~?~3I`=pim3@|%GDfOeFV8IruQl$wr2qO ztTjZGIRsA>-rzVfwZIj<4n-%h6rkw-$b(7cQHxrq%2tIDtdx)5xKZL(Ec1kNrxhSY zN={7xQw~n+xBP279{6`*ro>Ts={!uK3eO zewWy4GaH{qvO0dyl)d9k0>5(L*Dd5#eyq@FtWCGK`X6XV^|ZS9TR~o%tD4P9{m~Vq z81H-Mdx$T6oFm?pqx%{vdCy6c!F(&OaK^xQ;!``@KDLxqSE}Y}xr9v$ywWwyrg>q# zRP3hKvZUuimGocKrx3+I_e}nbcp~8f&ZX9Mg$uwjP1z$4M3s=0Fliy&wQw7;go?@i zQEEI3ggPAuThK}9Hu7M>@&Jo>3wA41r$-~tJ?{j4$28MPIi27Jiz{-Qs=#2a|TcKHgCHioFWz%#{6>Wx}S)Cld8!?Jr$4?Vg XIGiD~@}&np27&qoyKqJ#Xc7Pbt!~3- literal 0 HcmV?d00001 diff --git a/tests/testdata/rang_rio_old.RDS b/tests/testdata/rang_rio_old.RDS new file mode 100644 index 0000000000000000000000000000000000000000..9d16c58ac87b43ee9293f7133564c7a03f06b1a5 GIT binary patch literal 1073 zcmV-11kU>(iwFP!000001Kn6lZ__{!c9S@dwke1nI3e|h1hVBkN=qdW2n6a0L|du1 z;3iwgienploi;s{6F-C_;>@+b0de4$AS9}W^qvRDVdMGeO8L2mgkSlo;zu+fmJpjbIL8J~RxT)O&u( zZ=Zhq@bSbCjP^xr8>$OF=ODb-ueLUK+c*-7fr#0j_{cI@@AEs`&qB9h-GbQ*F#EVR z9J?^OfFt5)?A(F6klui)uXG<#k!x~oRw0S8_bH5t+h!PJ3I>-@&|}TL0moeI=%(g? zxNkW~*UU&PW8`AoRWZ}O^c>m9?6@Fq_HE0-(?lkm$B$O(a&1*sz^8kh7iQit9&o-I zigXB(k`81kR3_ojC^ywU0{<#}0!JPlg7=550did3G82XE?WIi1MA6e6v=3c}kU;Rz z2BYe*<){bDP~{=?q`?$t4>F4??>oe4CXk9_9mo(&)yLm4`5BEyr$UluM25HGG~Q;& zU-2B!t}4^x67sI4nS22uUYzYOpHKWnnA~Q#I4pRx($cdgDWZ>X*NVwr?C2Wl!OtIM zG*AsMIq+aGHep;Lf54DY{-{sLA4OuK$W8Dql;j5M8#k%YK`(|%Ds*o4iPkh(27jZA zu+jfvZYhnJRPsysw~qb<$AZB`+U`+fgMkOlZ{hH3~hW zB~7yp3)k8142fyRm$y94r_y@E7+#eup zjt{I@q^$_g9>{fCh<#P&-ahet4ciQTom64+{pRq5acdkC7_$iL6cHM%(PThhKkS}y zusfF_WH48iv9 zELoUa_KYHPGAi=AwA#FY6vvIe{yg^M=u4=ZCn^L)SeaqdEvgPQSZmI^XZU@=W;f7~MpPxIeK+Rvz67gL#5auiz z_v`Ul#%Jc3uhX!e)NbBZZ7gXBujnQLy zDWki5qqgT5P01o;cU@!pm|(<|01a6=ca$!Ad!C6ssjkRMa|}ldZ89_fA=<@>XqgRY rw^FzXaT_tj!$L?ZH zYbGt|$&v9--Z!(|i2bVg5YZ=5}Yo+{9fWUMU5d{6Z)N|5;f&ko=|uTtO}#xpxcR)>PuLhL4t00xVSK|G|7uLAh~LmpShh_i^6=P$tZY#yaKn7;y|HBqhm~5ZxLjU+*giC;|wMh z&pZ0ek!i)rEqk^mZyp?Ll)vgg4o-gF`Ety#p7Wk#4kmW^%L!11M()6Xx*M12(x__> zV$PMQt?8ZvWYZ0znUkLI8Hg|GmFH$(Gj(!)pZCgYe6lcGax-20CmXzNv}V%?(GIbH z7-^)@MlufbQYcH1U%3MCONj4=F|Pddy?*K;lOq~1SwN1vBipnhRoJ58rZ&Ex9c>kuY^RbGN-cO$LOc<4;1~VL}n2H05?UMNB{r; delta 855 zcmV-d1E~C!2bKpEABzY80000000Z4vOK;Oa5O&^9krYmUf>6xog+hrnh0^xc3+Vxq zt*}m&J!SUfgksRHID}fpJ`tEfN?f$}dK9VVboS#bEvM}*o0zX(ZLsDk@=>RzX4Agq zcDkBNkX@~*G!;ovCAE#r@)kw9A~lGlHsw}0NPZ>w7UHQO-Ma2*=Gs~kRV`Ewo>aTA zpQv|b<085#g^`oWn!#_?X9O_=r9Gr=tUTP z+B@`J9$z4k%6RJ7fw+jL?LuANM@f;J(*0RGG3MdT@5esI?DrfoBWhey$onoNdJB;T zBfSPGa9(Qr&{>YY53MdSs7y>eHS0s$a$Gu7SKJ(b^?HQ56gjCqe$-H8Rcf9Ac zap=G@6M;Q?mr@m(V6W$pT`={as=1yGN_DT}Xa~rZ=z%3q!?TX=7%cHJ6 zh&flLwx)XykWDv;W=?v-XCS_$i_guzX6oepKJS&)_+(+WvBii$lJct#SY-dRuQyx~r{6GK8dv(+Qdwu#di znAFt_qak^Xp|*#wxTTidmYYbJy0>RKlDeofhv2}^(U}u5+Z^6VO-V=r__FBFP=|Wd hA@4y}br9QwKOZtDQS<{e2GsR)_y@;VG-YHF002UVoPhuU diff --git a/tests/testthat/test_dockerize.R b/tests/testthat/test_dockerize.R index b964ade..3dfd87f 100644 --- a/tests/testthat/test_dockerize.R +++ b/tests/testthat/test_dockerize.R @@ -8,105 +8,105 @@ test_that("defensive programming", { }) test_that("integration of #13 in dockerize()", { - gran_ok <- readRDS("../testdata/gran_ok.RDS") + rang_ok <- readRDS("../testdata/rang_ok.RDS") temp_dir <- .gen_temp_dir() - dockerize(granlist = gran_ok, output_dir = temp_dir) ## granlist_as_comment = TRUE - x <- readLines(file.path(temp_dir, "gran.R")) + dockerize(rang = rang_ok, output_dir = temp_dir) ## rang_as_comment = TRUE + x <- readLines(file.path(temp_dir, "rang.R")) expect_true(any(grepl("^## ## To reconstruct this file", x))) - dockerize(granlist = gran_ok, output_dir = temp_dir, granlist_as_comment = FALSE) - x <- readLines(file.path(temp_dir, "gran.R")) + dockerize(rang = rang_ok, output_dir = temp_dir, rang_as_comment = FALSE) + x <- readLines(file.path(temp_dir, "rang.R")) expect_false(any(grepl("^## ## To reconstruct this file", x))) }) test_that("integration of #16 in dockerize()", { ## verbose - gran_ok <- readRDS("../testdata/gran_ok.RDS") + rang_ok <- readRDS("../testdata/rang_ok.RDS") temp_dir <- .gen_temp_dir() - dockerize(granlist = gran_ok, output_dir = temp_dir) ## verbose = TRUE - x <- readLines(file.path(temp_dir, "gran.R")) + dockerize(rang = rang_ok, output_dir = temp_dir) ## verbose = TRUE + x <- readLines(file.path(temp_dir, "rang.R")) expect_true(any(grepl("^verbose <- TRUE", x))) - dockerize(granlist = gran_ok, output_dir = temp_dir, verbose = FALSE) - x <- readLines(file.path(temp_dir, "gran.R")) + dockerize(rang = rang_ok, output_dir = temp_dir, verbose = FALSE) + x <- readLines(file.path(temp_dir, "rang.R")) expect_true(any(grepl("^verbose <- FALSE", x))) ## lib - dockerize(granlist = gran_ok, output_dir = temp_dir) ## lib = NA - x <- readLines(file.path(temp_dir, "gran.R")) + dockerize(rang = rang_ok, output_dir = temp_dir) ## lib = NA + x <- readLines(file.path(temp_dir, "rang.R")) expect_true(any(grepl("^lib <- NA", x))) Dockerfile <- readLines(file.path(temp_dir, "Dockerfile")) expect_false(any(grepl("^RUN mkdir", Dockerfile))) - dockerize(granlist = gran_ok, output_dir = temp_dir, lib = "abc") ## lib = NA - x <- readLines(file.path(temp_dir, "gran.R")) + dockerize(rang = rang_ok, output_dir = temp_dir, lib = "abc") ## lib = NA + x <- readLines(file.path(temp_dir, "rang.R")) expect_true(any(grepl("^lib <- \"abc\"", x))) Dockerfile <- readLines(file.path(temp_dir, "Dockerfile")) expect_true(any(grepl("^RUN mkdir", Dockerfile))) }) test_that("integration of #18 in dockerize()", { - gran_ok <- readRDS("../testdata/gran_ok.RDS") + rang_ok <- readRDS("../testdata/rang_ok.RDS") temp_dir <- .gen_temp_dir() - dockerize(granlist = gran_ok, output_dir = temp_dir) ## cran_mirror = "https://cran.r-project.org/" - x <- readLines(file.path(temp_dir, "gran.R")) + dockerize(rang = rang_ok, output_dir = temp_dir) ## cran_mirror = "https://cran.r-project.org/" + x <- readLines(file.path(temp_dir, "rang.R")) expect_true(any(grepl("^cran_mirror <- \"https://cran\\.r\\-project\\.org/\"", x))) - dockerize(granlist = gran_ok, output_dir = temp_dir, cran_mirror = "cran.r-project.org") - x <- readLines(file.path(temp_dir, "gran.R")) + dockerize(rang = rang_ok, output_dir = temp_dir, cran_mirror = "cran.r-project.org") + x <- readLines(file.path(temp_dir, "rang.R")) expect_true(any(grepl("^cran_mirror <- \"https://cran\\.r\\-project\\.org/\"", x))) - dockerize(granlist = gran_ok, output_dir = temp_dir, cran_mirror = "https://cloud.r-project.org/") - x <- readLines(file.path(temp_dir, "gran.R")) + dockerize(rang = rang_ok, output_dir = temp_dir, cran_mirror = "https://cloud.r-project.org/") + x <- readLines(file.path(temp_dir, "rang.R")) expect_true(any(grepl("^cran_mirror <- \"https://cloud\\.r\\-project\\.org/\"", x))) - expect_error(dockerize(granlist = gran_ok, output_dir = temp_dir, cran_mirror = "https://www.chainsawriot.com/")) - expect_error(dockerize(granlist = gran_ok, output_dir = temp_dir, cran_mirror = "https://www.chainsawriot.com/", check_cran_mirror = FALSE), NA) - x <- readLines(file.path(temp_dir, "gran.R")) + expect_error(dockerize(rang = rang_ok, output_dir = temp_dir, cran_mirror = "https://www.chainsawriot.com/")) + expect_error(dockerize(rang = rang_ok, output_dir = temp_dir, cran_mirror = "https://www.chainsawriot.com/", check_cran_mirror = FALSE), NA) + x <- readLines(file.path(temp_dir, "rang.R")) expect_true(any(grepl("^cran_mirror <- \"https://www\\.chainsawriot\\.com/\"", x))) }) test_that("integration of #20 to dockerize()", { - gran_ok <- readRDS("../testdata/gran_ok.RDS") - expect_equal(gran_ok$r_version, "4.2.2") + rang_ok <- readRDS("../testdata/rang_ok.RDS") + expect_equal(rang_ok$r_version, "4.2.2") temp_dir <- .gen_temp_dir() - dockerize(gran_ok, output_dir = temp_dir) ## cran_mirror = "https://cran.r-project.org/" - x <- readLines(file.path(temp_dir, "gran.R")) + dockerize(rang_ok, output_dir = temp_dir) ## cran_mirror = "https://cran.r-project.org/" + x <- readLines(file.path(temp_dir, "rang.R")) expect_true(any(grepl("^cran_mirror <- \"https://cran\\.r\\-project\\.org/\"", x))) - gran_ok <- readRDS("../testdata/gran_ok.RDS") - gran_ok$r_version <- "3.3.0" - dockerize(gran_ok, output_dir = temp_dir) ## cran_mirror = "https://cran.r-project.org/" - x <- readLines(file.path(temp_dir, "gran.R")) + rang_ok <- readRDS("../testdata/rang_ok.RDS") + rang_ok$r_version <- "3.3.0" + dockerize(rang_ok, output_dir = temp_dir) ## cran_mirror = "https://cran.r-project.org/" + x <- readLines(file.path(temp_dir, "rang.R")) expect_true(any(grepl("^cran_mirror <- \"https://cran\\.r\\-project\\.org/\"", x))) - gran_ok <- readRDS("../testdata/gran_ok.RDS") - gran_ok$r_version <- "3.2.0" - dockerize(gran_ok, output_dir = temp_dir) ## cran_mirror = "https://cran.r-project.org/" - x <- readLines(file.path(temp_dir, "gran.R")) + rang_ok <- readRDS("../testdata/rang_ok.RDS") + rang_ok$r_version <- "3.2.0" + dockerize(rang_ok, output_dir = temp_dir) ## cran_mirror = "https://cran.r-project.org/" + x <- readLines(file.path(temp_dir, "rang.R")) expect_false(any(grepl("^cran_mirror <- \"https://cran\\.r\\-project\\.org/\"", x))) expect_true(any(grepl("^cran_mirror <- \"http://cran\\.r\\-project\\.org/\"", x))) }) test_that("Dockerize R < 3.1 and >= 2.1", { - gran_rio <- readRDS("../testdata/gran_rio_old.RDS") - expect_equal(gran_rio$r_version, "3.0.1") + rang_rio <- readRDS("../testdata/rang_rio_old.RDS") + expect_equal(rang_rio$r_version, "3.0.1") temp_dir <- .gen_temp_dir() - dockerize(gran_rio, output_dir = temp_dir) + dockerize(rang_rio, output_dir = temp_dir) expect_true(file.exists(file.path(temp_dir, "compile_r.sh"))) Dockerfile <- readLines(file.path(temp_dir, "Dockerfile")) expect_true(any(grepl("^RUN bash compile_r.sh 3.0.1", Dockerfile))) ## lib - dockerize(gran_rio, output_dir = temp_dir, lib = "abc") + dockerize(rang_rio, output_dir = temp_dir, lib = "abc") Dockerfile <- readLines(file.path(temp_dir, "Dockerfile")) expect_true(any(grepl("^RUN mkdir", Dockerfile))) }) test_that("Docker R < 2.1", { - gran_rio <- readRDS("../testdata/gran_rio_old.RDS") - gran_rio$r_version <- "2.1.0" ## exactly 2.1.0, no error + rang_rio <- readRDS("../testdata/rang_rio_old.RDS") + rang_rio$r_version <- "2.1.0" ## exactly 2.1.0, no error temp_dir <- .gen_temp_dir() - expect_error(dockerize(gran_rio, output_dir = temp_dir), NA) - gran_rio <- readRDS("../testdata/gran_rio_old.RDS") - gran_rio$r_version <- "2.0.0" - expect_error(dockerize(gran_rio, output_dir = temp_dir)) + expect_error(dockerize(rang_rio, output_dir = temp_dir), NA) + rang_rio <- readRDS("../testdata/rang_rio_old.RDS") + rang_rio$r_version <- "2.0.0" + expect_error(dockerize(rang_rio, output_dir = temp_dir)) }) test_that(".consolidate_sysreqs and issue #21", { graph <- readRDS("../testdata/graph.RDS") expect_equal(.consolidate_sysreqs(graph), "apt-get update -qq && apt-get install -y default-jdk libgsl0-dev libicu-dev libpng-dev libxml2-dev make python3 zlib1g-dev liblzma-dev libpcre3-dev libbz2-dev && R CMD javareconf") - graph <- readRDS("../testdata/gran_ok.RDS") + graph <- readRDS("../testdata/rang_ok.RDS") expect_equal(.consolidate_sysreqs(graph), "apt-get update -qq") graph <- readRDS("../testdata/issue21.RDS") expected_output <- "apt-get update -qq && apt-get install -y software-properties-common && add-apt-repository -y ppa:cran/libgit2 && apt-get update && apt-get install -y cmake git libcurl4-openssl-dev libfontconfig1-dev libfreetype6-dev libfribidi-dev libgit2-dev libgsl0-dev libharfbuzz-dev libicu-dev libjpeg-dev libpng-dev libssh2-1-dev libssl-dev libtiff-dev libxml2-dev make pandoc pari-gp zlib1g-dev" @@ -125,23 +125,23 @@ test_that("Dockerize warning, issue #21", { test_that("material_dir, non-existing, #23", { ## normal case - gran_rio <- readRDS("../testdata/gran_rio_old.RDS") + rang_rio <- readRDS("../testdata/rang_rio_old.RDS") temp_dir <- .gen_temp_dir() - expect_error(dockerize(gran_rio, output_dir = temp_dir, materials_dir = NULL), NA) + expect_error(dockerize(rang_rio, output_dir = temp_dir, materials_dir = NULL), NA) ## non-existing fake_material_dir <- .gen_temp_dir() expect_false(dir.exists(fake_material_dir)) - expect_error(dockerize(gran_rio, output_dir = temp_dir, materials_dir = fake_material_dir)) + expect_error(dockerize(rang_rio, output_dir = temp_dir, materials_dir = fake_material_dir)) }) test_that("material_dir, existing, no subdir, #23", { ## exist, but empty dir ## Pre R 3.1.0 - gran_rio <- readRDS("../testdata/gran_rio_old.RDS") + rang_rio <- readRDS("../testdata/rang_rio_old.RDS") temp_dir <- .gen_temp_dir() fake_material_dir <- .gen_temp_dir() dir.create(fake_material_dir) - dockerize(gran_rio, output_dir = temp_dir, materials_dir = fake_material_dir) + dockerize(rang_rio, output_dir = temp_dir, materials_dir = fake_material_dir) expect_true(dir.exists(file.path(temp_dir, "materials"))) expect_equal(list.files(file.path(temp_dir, "materials")), character(0)) expect_true(any(readLines(file.path(temp_dir, "Dockerfile")) == "COPY materials/ ./materials/")) diff --git a/tests/testthat/test_export_granlist.R b/tests/testthat/test_expost_rang.R similarity index 56% rename from tests/testthat/test_export_granlist.R rename to tests/testthat/test_expost_rang.R index f2df3e8..32138b9 100644 --- a/tests/testthat/test_export_granlist.R +++ b/tests/testthat/test_expost_rang.R @@ -1,32 +1,32 @@ -test_that("granlist_as_comment or #13", { - gran_ok <- readRDS("../testdata/gran_ok.RDS") +test_that("rang_as_comment or #13", { + rang_ok <- readRDS("../testdata/rang_ok.RDS") temp_r <- tempfile(fileext = ".R") - export_granlist(gran_ok, path = temp_r) ## default granlist_as_comment = TRUE + export_rang(rang_ok, path = temp_r) ## default rang_as_comment = TRUE x <- readLines(temp_r) expect_true(any(grepl("^## ## To reconstruct this file", x))) - export_granlist(gran_ok, path = temp_r, granlist_as_comment = FALSE) ## default granlist_as_comment = TRUE + export_rang(rang_ok, path = temp_r, rang_as_comment = FALSE) ## default rang_as_comment = TRUE x <- readLines(temp_r) expect_false(any(grepl("^## ## To reconstruct this file", x))) }) test_that("verbose #16", { - gran_ok <- readRDS("../testdata/gran_ok.RDS") + rang_ok <- readRDS("../testdata/rang_ok.RDS") temp_r <- tempfile(fileext = ".R") - export_granlist(gran_ok, path = temp_r, granlist_as_comment = FALSE) ## verbose = TRUE + export_rang(rang_ok, path = temp_r, rang_as_comment = FALSE) ## verbose = TRUE x <- readLines(temp_r) expect_true(any(grepl("^verbose <- TRUE", x))) - export_granlist(gran_ok, path = temp_r, granlist_as_comment = FALSE, verbose = FALSE) + export_rang(rang_ok, path = temp_r, rang_as_comment = FALSE, verbose = FALSE) x <- readLines(temp_r) expect_true(any(grepl("^verbose <- FALSE", x))) }) test_that("lib #16", { - gran_ok <- readRDS("../testdata/gran_ok.RDS") + rang_ok <- readRDS("../testdata/rang_ok.RDS") temp_r <- tempfile(fileext = ".R") - export_granlist(gran_ok, path = temp_r, granlist_as_comment = FALSE) ## lib = NA + export_rang(rang_ok, path = temp_r, rang_as_comment = FALSE) ## lib = NA x <- readLines(temp_r) expect_true(any(grepl("^lib <- NA", x))) - export_granlist(gran_ok, path = temp_r, granlist_as_comment = FALSE, verbose = FALSE, lib = "abc") + export_rang(rang_ok, path = temp_r, rang_as_comment = FALSE, verbose = FALSE, lib = "abc") x <- readLines(temp_r) expect_true(any(grepl("^lib <- \"abc\"", x))) }) @@ -59,52 +59,52 @@ test_that(".check_mirror", { expect_false(.check_mirror("https://www.chainsawriot.com/")) }) -test_that("integration of mirror selection to `export_granlist` #18", { - gran_ok <- readRDS("../testdata/gran_ok.RDS") +test_that("integration of mirror selection to `export_rang` #18", { + rang_ok <- readRDS("../testdata/rang_ok.RDS") temp_r <- tempfile(fileext = ".R") - export_granlist(gran_ok, path = temp_r) ## cran_mirror = "https://cran.r-project.org/" + export_rang(rang_ok, path = temp_r) ## cran_mirror = "https://cran.r-project.org/" x <- readLines(temp_r) expect_true(any(grepl("^cran_mirror <- \"https://cran\\.r\\-project\\.org/\"", x))) - export_granlist(gran_ok, path = temp_r, cran_mirror = "cran.r-project.org") + export_rang(rang_ok, path = temp_r, cran_mirror = "cran.r-project.org") x <- readLines(temp_r) expect_true(any(grepl("^cran_mirror <- \"https://cran\\.r\\-project\\.org/\"", x))) - export_granlist(gran_ok, path = temp_r, cran_mirror = "https://cloud.r-project.org/") + export_rang(rang_ok, path = temp_r, cran_mirror = "https://cloud.r-project.org/") x <- readLines(temp_r) expect_true(any(grepl("^cran_mirror <- \"https://cloud\\.r\\-project\\.org/\"", x))) - expect_error(export_granlist(gran_ok, path = temp_r, cran_mirror = "https://www.chainsawriot.com/")) - expect_error(export_granlist(gran_ok, path = temp_r, cran_mirror = "https://www.chainsawriot.com/", check_cran_mirror = FALSE), NA) + expect_error(export_rang(rang_ok, path = temp_r, cran_mirror = "https://www.chainsawriot.com/")) + expect_error(export_rang(rang_ok, path = temp_r, cran_mirror = "https://www.chainsawriot.com/", check_cran_mirror = FALSE), NA) x <- readLines(temp_r) expect_true(any(grepl("^cran_mirror <- \"https://www\\.chainsawriot\\.com/\"", x))) }) -test_that("integration of https to `export_granlist` #20", { - gran_ok <- readRDS("../testdata/gran_ok.RDS") - expect_equal(gran_ok$r_version, "4.2.2") +test_that("integration of https to `export_rang` #20", { + rang_ok <- readRDS("../testdata/rang_ok.RDS") + expect_equal(rang_ok$r_version, "4.2.2") temp_r <- tempfile(fileext = ".R") - export_granlist(gran_ok, path = temp_r) ## cran_mirror = "https://cran.r-project.org/" + export_rang(rang_ok, path = temp_r) ## cran_mirror = "https://cran.r-project.org/" x <- readLines(temp_r) expect_true(any(grepl("^cran_mirror <- \"https://cran\\.r\\-project\\.org/\"", x))) - gran_ok <- readRDS("../testdata/gran_ok.RDS") - gran_ok$r_version <- "3.3.0" + rang_ok <- readRDS("../testdata/rang_ok.RDS") + rang_ok$r_version <- "3.3.0" temp_r <- tempfile(fileext = ".R") - export_granlist(gran_ok, path = temp_r) ## cran_mirror = "https://cran.r-project.org/" + export_rang(rang_ok, path = temp_r) ## cran_mirror = "https://cran.r-project.org/" x <- readLines(temp_r) expect_true(any(grepl("^cran_mirror <- \"https://cran\\.r\\-project\\.org/\"", x))) - gran_ok <- readRDS("../testdata/gran_ok.RDS") - gran_ok$r_version <- "3.2.0" + rang_ok <- readRDS("../testdata/rang_ok.RDS") + rang_ok$r_version <- "3.2.0" temp_r <- tempfile(fileext = ".R") - export_granlist(gran_ok, path = temp_r) ## cran_mirror = "https://cran.r-project.org/" + export_rang(rang_ok, path = temp_r) ## cran_mirror = "https://cran.r-project.org/" x <- readLines(temp_r) expect_false(any(grepl("^cran_mirror <- \"https://cran\\.r\\-project\\.org/\"", x))) expect_true(any(grepl("^cran_mirror <- \"http://cran\\.r\\-project\\.org/\"", x))) }) test_that("Docker R < 2.1", { - gran_rio <- readRDS("../testdata/gran_rio_old.RDS") - gran_rio$r_version <- "2.1.0" ## exactly 2.1.0, no error + rang_rio <- readRDS("../testdata/rang_rio_old.RDS") + rang_rio$r_version <- "2.1.0" ## exactly 2.1.0, no error temp_r <- tempfile(fileext = ".R") - expect_error(export_granlist(gran_rio, path = temp_r), NA) - gran_rio <- readRDS("../testdata/gran_rio_old.RDS") - gran_rio$r_version <- "2.0.0" - expect_error(export_granlist(gran_rio, path = temp_r)) + expect_error(export_rang(rang_rio, path = temp_r), NA) + rang_rio <- readRDS("../testdata/rang_rio_old.RDS") + rang_rio$r_version <- "2.0.0" + expect_error(export_rang(rang_rio, path = temp_r)) }) diff --git a/tests/testthat/test_resolve.R b/tests/testthat/test_resolve.R index b077164..68770b9 100644 --- a/tests/testthat/test_resolve.R +++ b/tests/testthat/test_resolve.R @@ -27,7 +27,7 @@ test_that("unresolved", { expect_true(any(grepl("^Some package", warns))) expect_true(any(grepl("^No packages to query", warns))) expect_equal(x$unresolved_pkgrefs, "cran::LDAvis") - expect_equal(x$grans, list()) + expect_equal(x$ranglets, list()) expect_true(is.na(x$deps_sysreqs)) ## a mixture; sna is old enough warns2 <- capture_warnings(x2 <- resolve(c("sna", "LDAvis"), snapshot_date = "2001-10-01")) @@ -35,7 +35,7 @@ test_that("unresolved", { expect_true(any(grepl("^Some package", warns2))) expect_false(any(grepl("^No packages to query", warns2))) expect_equal(x2$unresolved_pkgrefs, "cran::LDAvis") - expect_false(length(x2$grans) == 0) + expect_false(length(x2$ranglets) == 0) expect_equal(x2$deps_sysreqs, character(0)) }) @@ -51,32 +51,32 @@ test_that("issue #19", { test_that("cache #17", { skip_if_offline() skip_on_cran() - gran_ok <- readRDS("../testdata/gran_ok.RDS") + rang_ok <- readRDS("../testdata/rang_ok.RDS") temp_dir <- .gen_temp_dir() - dockerize(gran_ok, output_dir = temp_dir) ## cache = FALSE + dockerize(rang_ok, output_dir = temp_dir) ## cache = FALSE x <- readLines(file.path(temp_dir, "Dockerfile")) expect_false(any(grepl("^COPY cache", x))) expect_false(dir.exists(file.path(temp_dir, "cache"))) expect_false(file.exists(file.path(temp_dir, "cache", "LDAvis_0.3.2.tar.gz"))) expect_false(file.exists(file.path(temp_dir, "cache", "proxy_0.4-27.tar.gz"))) expect_false(file.exists(file.path(temp_dir, "cache", "RJSONIO_1.3-1.6.tar.gz"))) - expect_silent(dockerize(gran_ok, output_dir = temp_dir, cache = TRUE, verbose = FALSE)) + expect_silent(dockerize(rang_ok, output_dir = temp_dir, cache = TRUE, verbose = FALSE)) x <- readLines(file.path(temp_dir, "Dockerfile")) expect_true(any(grepl("^COPY cache", x))) expect_true(dir.exists(file.path(temp_dir, "cache"))) expect_true(file.exists(file.path(temp_dir, "cache", "LDAvis_0.3.2.tar.gz"))) expect_true(file.exists(file.path(temp_dir, "cache", "proxy_0.4-27.tar.gz"))) expect_true(file.exists(file.path(temp_dir, "cache", "RJSONIO_1.3-1.6.tar.gz"))) - ## expect_output(dockerize(gran_ok, output_dir = temp_dir, cache = TRUE, verbose = TRUE)) + ## expect_output(dockerize(rang_ok, output_dir = temp_dir, cache = TRUE, verbose = TRUE)) }) test_that("cache for R < 3.1 and R >= 2.1", { skip_if_offline() skip_on_cran() - gran_rio <- readRDS("../testdata/gran_rio_old.RDS") - expect_equal(gran_rio$r_version, "3.0.1") + rang_rio <- readRDS("../testdata/rang_rio_old.RDS") + expect_equal(rang_rio$r_version, "3.0.1") temp_dir <- .gen_temp_dir() - dockerize(gran_rio, output_dir = temp_dir, cache = TRUE, verbose = FALSE) + dockerize(rang_rio, output_dir = temp_dir, cache = TRUE, verbose = FALSE) x <- readLines(file.path(temp_dir, "Dockerfile")) expect_true(any(grepl("^COPY cache", x))) expect_true(dir.exists(file.path(temp_dir, "cache"))) diff --git a/tests/testthat/test_s3.R b/tests/testthat/test_s3.R index 97fc633..4859fff 100644 --- a/tests/testthat/test_s3.R +++ b/tests/testthat/test_s3.R @@ -1,26 +1,26 @@ test_that("printing with and without resolved packages", { - gran_mixture <- readRDS("../testdata/gran_mixture.RDS") - gran_ok <- readRDS("../testdata/gran_ok.RDS") - gran_unresolved <- readRDS("../testdata/gran_unresolved.RDS") - gran_output <- capture_output(print(gran_ok$grans[[1]])) - expect_equal(gran_output, "The latest version of `LDAvis` [cran] at 2023-01-01 was 0.3.2, which has 2 unique dependencies (2 with no dependencies.)") - gran_ok_output <- capture_output(print(gran_ok)) - expect_true(grepl("^resolved: 1 package\\(s\\). Unresolved package\\(s\\): 0", gran_ok_output)) - gran_mixture_output <- capture_output(print(gran_mixture)) - expect_true(grepl("^resolved: 1 package\\(s\\). Unresolved package\\(s\\): 1", gran_mixture_output)) - gran_unresolved_output <- capture_output(print(gran_unresolved)) - expect_true(grepl("^resolved: 0 package\\(s\\). Unresolved package\\(s\\): 1", gran_unresolved_output)) - expect_false(grepl("The latest version", gran_unresolved_output)) + rang_mixture <- readRDS("../testdata/rang_mixture.RDS") + rang_ok <- readRDS("../testdata/rang_ok.RDS") + rang_unresolved <- readRDS("../testdata/rang_unresolved.RDS") + rang_output <- capture_output(print(rang_ok$ranglets[[1]])) + expect_equal(rang_output, "The latest version of `LDAvis` [cran] at 2023-01-01 was 0.3.2, which has 2 unique dependencies (2 with no dependencies.)") + rang_ok_output <- capture_output(print(rang_ok)) + expect_true(grepl("^resolved: 1 package\\(s\\). Unresolved package\\(s\\): 0", rang_ok_output)) + rang_mixture_output <- capture_output(print(rang_mixture)) + expect_true(grepl("^resolved: 1 package\\(s\\). Unresolved package\\(s\\): 1", rang_mixture_output)) + rang_unresolved_output <- capture_output(print(rang_unresolved)) + expect_true(grepl("^resolved: 0 package\\(s\\). Unresolved package\\(s\\): 1", rang_unresolved_output)) + expect_false(grepl("The latest version", rang_unresolved_output)) }) test_that("all_pkgs", { - gran_mixture <- readRDS("../testdata/gran_mixture.RDS") - output1 <- capture_output(print(gran_mixture, all_pkgs = FALSE)) - output2 <- capture_output(print(gran_mixture, all_pkgs = TRUE)) + rang_mixture <- readRDS("../testdata/rang_mixture.RDS") + output1 <- capture_output(print(rang_mixture, all_pkgs = FALSE)) + output2 <- capture_output(print(rang_mixture, all_pkgs = TRUE)) expect_true(output1 == output2) - gran_6 <- readRDS("../testdata/gran_6.RDS") - output1 <- capture_output(print(gran_6, all_pkgs = FALSE)) - output2 <- capture_output(print(gran_6, all_pkgs = TRUE)) + rang_6 <- readRDS("../testdata/rang_6.RDS") + output1 <- capture_output(print(rang_6, all_pkgs = FALSE)) + output2 <- capture_output(print(rang_6, all_pkgs = TRUE)) expect_false(output1 == output2) expect_true(grepl("First 5 packages", output1)) expect_false(grepl("First 5 packages", output2)) From 01950f63bc9941f2a22032f08032d478b0e3af05 Mon Sep 17 00:00:00 2001 From: chainsawriot Date: Sun, 12 Feb 2023 23:13:40 +0100 Subject: [PATCH 2/3] Rename gran in README and logo ref #35 --- README.Rmd | 38 +++++------ README.md | 68 +++++++++++--------- man/figures/{gran_logo.svg => rang_logo.svg} | 4 +- 3 files changed, 57 insertions(+), 53 deletions(-) rename man/figures/{gran_logo.svg => rang_logo.svg} (99%) diff --git a/README.Rmd b/README.Rmd index 7fe3737..f6dca06 100644 --- a/README.Rmd +++ b/README.Rmd @@ -13,15 +13,15 @@ knitr::opts_chunk$set( ) ``` -# gran +# rang -[![R-CMD-check](https://github.com/chainsawriot/gran/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/chainsawriot/gran/actions/workflows/R-CMD-check.yaml) +[![R-CMD-check](https://github.com/chainsawriot/rang/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/chainsawriot/rang/actions/workflows/R-CMD-check.yaml) -The goal of gran (gran: R anachronism nullifier) [^gesis] is to obtain the dependency graph of R packages at a specific time point. +The goal of rang (Reconstructing Ancient Number-crunching Gears) [^gesis] is to obtain the dependency graph of R packages at a specific time point. -Although this package can also be used to ensure the current R computational environment can be reconstructed by future researchers, this package gears towards reconstructing historical R computational environments which have not been completely declared. For the former purpose, packages such as [renv](https://github.com/rstudio/renv/), [groundhog](https://github.com/CredibilityLab/groundhog), [miniCRAN](https://github.com/andrie/miniCRAN), and [Require](https://github.com/PredictiveEcology/Require) should be used. One can think of gran as an archaeological tool. +Although this package can also be used to ensure the current R computational environment can be reconstructed by future researchers, this package gears towards reconstructing historical R computational environments which have not been completely declared. For the former purpose, packages such as [renv](https://github.com/rstudio/renv/), [groundhog](https://github.com/CredibilityLab/groundhog), [miniCRAN](https://github.com/andrie/miniCRAN), and [Require](https://github.com/PredictiveEcology/Require) should be used. One can think of rang as an archaeological tool. To reconstruct a historical R computational environment, this package assumes only the availability of source packages on CRAN. The reconstruction procedures have been tested in several vintage versions of R. @@ -29,10 +29,10 @@ To reconstruct a historical R computational environment, this package assumes on ## Installation -You can install the development version of gran like so: +You can install the development version of rang like so: ``` r -remotes::install_github("chainsawriot/gran") +remotes::install_github("chainsawriot/rang") ``` ## Example @@ -40,7 +40,7 @@ remotes::install_github("chainsawriot/gran") To obtain the dependency graph of an R package, use `resolve` ```r -library(gran) +library(rang) graph <- resolve(pkgs = c("openNLP", "LDAvis", "topicmodels", "quanteda"), snapshot_date = "2020-01-16") ``` @@ -62,17 +62,17 @@ graph$deps_sysreqs graph$r_version ``` -The resolved result is an S3 object called `granlist` and can be exported as an installation script. The installation script can be execute on a vanilla R installation. +The resolved result is an S3 object called `rang` and can be exported as an installation script. The installation script can be execute on a vanilla R installation. ```r -export_granlist(graph, "gran.R") +export_rang(graph, "rang.R") ``` However, the execution of the installation script often fails (now) due to missing system dependencies and incompatible R versions. Therefore, the approach outlined below should be used. ## Recreate the computational environment via Rocker -A `granlist` object can be used to recreate the computational environment via [Rocker](https://github.com/rocker-org/rocker). Please note that the oldest R version one can get from Rocker is R 3.1.0. +A `rang` object can be used to recreate the computational environment via [Rocker](https://github.com/rocker-org/rocker). Please note that the oldest R version one can get from Rocker is R 3.1.0. ```r dockerize(graph, "~/rocker_test") @@ -82,8 +82,8 @@ Now, you can build and run the Docker container. ```bash cd ~/rocker_test -sudo docker build -t gran . -sudo docker run --rm --name "grantest" -ti gran +sudo docker build -t rang . +sudo docker run --rm --name "rangtest" -ti rang ``` Using the above example, `sessionInfo()` outputs the following. You have successfully gone back to the pre-pandemic time. @@ -146,25 +146,25 @@ dockerize(graph, "~/rocker_test", image = "rstudio") ```bash cd ~/rocker_test -sudo docker build -t gran . -sudo docker run -p 8787:8787 -e PASSWORD=abc123 --rm --name "grantest" -ti gran +sudo docker build -t rang . +sudo docker run -p 8787:8787 -e PASSWORD=abc123 --rm --name "rangtest" -ti rang ``` With any browser, go to: `local:8787`. The default username is `rstudio`, password is as specified. ## Recreate the computational environment for R < 3.1.0 -`gran` can still be used to recreate computational environments for R < 3.1.0. The Dockerfile generated is based on Debian Woody (3.0) and the requested version of R is compiled from source. As of writing, this method works for R < 3.1.0 but not R < 2.1.0. The `image` parameter is ignored in this case. +`rang` can still be used to recreate computational environments for R < 3.1.0. The Dockerfile generated is based on Debian Woody (3.0) and the requested version of R is compiled from source. As of writing, this method works for R < 3.1.0 but not R < 2.1.0. The `image` parameter is ignored in this case. ```r -gran_rio <- resolve("rio", snapshot_date = "2013-08-28") ## R 3.0.1 -dockerize(gran_rio, output_dir = "~/old_renviron") +rang_rio <- resolve("rio", snapshot_date = "2013-08-28") ## R 3.0.1 +dockerize(rang_rio, output_dir = "~/old_renviron") ``` ## Acknowledgment -The logo of gran is a remix of [this](https://commons.wikimedia.org/wiki/File:Flag_of_the_Canary_Islands.svg) public domain image. The two dogs should be *Presa Canario*, the native dog breed on the islands of Gran Canaria and Tenerife. +The logo of rang is a remix of [this](https://commons.wikimedia.org/wiki/File:Flag_of_the_Canary_Islands.svg) public domain image. The two dogs should be *Presa Canario*, the native dog breed on the islands of Gran Canaria and Tenerife. --- -[^gesis]: Actually, it stands for "GESIS R Archive Network". +[^gesis]: It stands for "R Archiving Nerds at GESIS". The package was previously named `gran`, but we decided to rename it to `rang` because there is another package named [gRAN](https://cran.r-project.org/web/packages/GRANBase/vignettes/GRAN_Overview.html). diff --git a/README.md b/README.md index 5a660ea..66698d5 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,16 @@ -# gran +# rang -[![R-CMD-check](https://github.com/chainsawriot/gran/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/chainsawriot/gran/actions/workflows/R-CMD-check.yaml) +[![R-CMD-check](https://github.com/chainsawriot/rang/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/chainsawriot/rang/actions/workflows/R-CMD-check.yaml) -The goal of gran (gran: R anachronism nullifier) \[1\] is to obtain the -dependency graph of R packages at a specific time point. +The goal of rang (Reconstructing Ancient Number-crunching Gears) \[1\] +is to obtain the dependency graph of R packages at a specific time +point. Although this package can also be used to ensure the current R computational environment can be reconstructed by future researchers, @@ -19,7 +20,7 @@ purpose, packages such as [renv](https://github.com/rstudio/renv/), [groundhog](https://github.com/CredibilityLab/groundhog), [miniCRAN](https://github.com/andrie/miniCRAN), and [Require](https://github.com/PredictiveEcology/Require) should be used. -One can think of gran as an archaeological tool. +One can think of rang as an archaeological tool. To reconstruct a historical R computational environment, this package assumes only the availability of source packages on CRAN. The @@ -31,10 +32,10 @@ change. ## Installation -You can install the development version of gran like so: +You can install the development version of rang like so: ``` r -remotes::install_github("chainsawriot/gran") +remotes::install_github("chainsawriot/rang") ``` ## Example @@ -42,7 +43,7 @@ remotes::install_github("chainsawriot/gran") To obtain the dependency graph of an R package, use `resolve` ``` r -library(gran) +library(rang) graph <- resolve(pkgs = c("openNLP", "LDAvis", "topicmodels", "quanteda"), snapshot_date = "2020-01-16") ``` @@ -50,17 +51,17 @@ graph <- resolve(pkgs = c("openNLP", "LDAvis", "topicmodels", "quanteda"), ``` r graph #> resolved: 4 package(s). Unresolved package(s): 0 -#> $openNLP -#> The latest version of `openNLP` at 2020-01-16 was 0.2-7, which has 3 unique dependencies (2 with no dependencies.) +#> $`cran::openNLP` +#> The latest version of `openNLP` [cran] at 2020-01-16 was 0.2-7, which has 3 unique dependencies (2 with no dependencies.) #> -#> $LDAvis -#> The latest version of `LDAvis` at 2020-01-16 was 0.3.2, which has 2 unique dependencies (2 with no dependencies.) +#> $`cran::LDAvis` +#> The latest version of `LDAvis` [cran] at 2020-01-16 was 0.3.2, which has 2 unique dependencies (2 with no dependencies.) #> -#> $topicmodels -#> The latest version of `topicmodels` at 2020-01-16 was 0.2-9, which has 7 unique dependencies (5 with no dependencies.) +#> $`cran::topicmodels` +#> The latest version of `topicmodels` [cran] at 2020-01-16 was 0.2-9, which has 7 unique dependencies (5 with no dependencies.) #> -#> $quanteda -#> The latest version of `quanteda` at 2020-01-16 was 1.5.2, which has 64 unique dependencies (34 with no dependencies.) +#> $`cran::quanteda` +#> The latest version of `quanteda` [cran] at 2020-01-16 was 1.5.2, which has 63 unique dependencies (33 with no dependencies.) ``` ``` r @@ -76,12 +77,12 @@ graph$r_version #> [1] "3.6.2" ``` -The resolved result is an S3 object called `granlist` and can be -exported as an installation script. The installation script can be -execute on a vanilla R installation. +The resolved result is an S3 object called `rang` and can be exported as +an installation script. The installation script can be execute on a +vanilla R installation. ``` r -export_granlist(graph, "gran.R") +export_rang(graph, "rang.R") ``` However, the execution of the installation script often fails (now) due @@ -90,9 +91,9 @@ the approach outlined below should be used. ## Recreate the computational environment via Rocker -A `granlist` object can be used to recreate the computational -environment via [Rocker](https://github.com/rocker-org/rocker). Please -note that the oldest R version one can get from Rocker is R 3.1.0. +A `rang` object can be used to recreate the computational environment +via [Rocker](https://github.com/rocker-org/rocker). Please note that the +oldest R version one can get from Rocker is R 3.1.0. ``` r dockerize(graph, "~/rocker_test") @@ -102,8 +103,8 @@ Now, you can build and run the Docker container. ``` bash cd ~/rocker_test -sudo docker build -t gran . -sudo docker run --rm --name "grantest" -ti gran +sudo docker build -t rang . +sudo docker run --rm --name "rangtest" -ti rang ``` Using the above example, `sessionInfo()` outputs the following. You have @@ -172,8 +173,8 @@ dockerize(graph, "~/rocker_test", image = "rstudio") ``` bash cd ~/rocker_test -sudo docker build -t gran . -sudo docker run -p 8787:8787 -e PASSWORD=abc123 --rm --name "grantest" -ti gran +sudo docker build -t rang . +sudo docker run -p 8787:8787 -e PASSWORD=abc123 --rm --name "rangtest" -ti rang ``` With any browser, go to: `local:8787`. The default username is @@ -181,24 +182,27 @@ With any browser, go to: `local:8787`. The default username is ## Recreate the computational environment for R \< 3.1.0 -`gran` can still be used to recreate computational environments for R \< +`rang` can still be used to recreate computational environments for R \< 3.1.0. The Dockerfile generated is based on Debian Woody (3.0) and the requested version of R is compiled from source. As of writing, this method works for R \< 3.1.0 but not R \< 2.1.0. The `image` parameter is ignored in this case. ``` r -gran_rio <- resolve("rio", snapshot_date = "2013-08-28") ## R 3.0.1 -dockerize(gran_rio, output_dir = "~/old_renviron") +rang_rio <- resolve("rio", snapshot_date = "2013-08-28") ## R 3.0.1 +dockerize(rang_rio, output_dir = "~/old_renviron") ``` ## Acknowledgment -The logo of gran is a remix of +The logo of rang is a remix of [this](https://commons.wikimedia.org/wiki/File:Flag_of_the_Canary_Islands.svg) public domain image. The two dogs should be *Presa Canario*, the native dog breed on the islands of Gran Canaria and Tenerife. ----- -1. Actually, it stands for “GESIS R Archive Network”. +1. It stands for “R Archiving Nerds at GESIS”. The package was + previously named `gran`, but we decided to rename it to `rang` + because there is another package named + [gRAN](https://cran.r-project.org/web/packages/GRANBase/vignettes/GRAN_Overview.html). diff --git a/man/figures/gran_logo.svg b/man/figures/rang_logo.svg similarity index 99% rename from man/figures/gran_logo.svg rename to man/figures/rang_logo.svg index 75b4913..97dc9dc 100644 --- a/man/figures/gran_logo.svg +++ b/man/figures/rang_logo.svg @@ -7,7 +7,7 @@ viewBox="0 0 735 852" style="enable-background:new 0 0 735 852;" xml:space="preserve" - sodipodi:docname="gran.svg" + sodipodi:docname="rang_logo.svg" inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" @@ -11181,7 +11181,7 @@ id="tspan1181" x="201.06708" y="652.59601" - style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:120px;font-family:'Arial Black';-inkscape-font-specification:'Arial Black, Bold';fill:#f0ffff;fill-opacity:1;stroke-width:2.23153">granrang Date: Sun, 12 Feb 2023 23:31:14 +0100 Subject: [PATCH 3/3] Change package name in testthat.R ref #33 --- tests/testthat.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/testthat.R b/tests/testthat.R index d5f1ca7..700e159 100644 --- a/tests/testthat.R +++ b/tests/testthat.R @@ -7,6 +7,6 @@ # * https://testthat.r-lib.org/reference/test_package.html#special-files library(testthat) -library(gran) +library(rang) -test_check("gran") +test_check("rang")