From e7ab2188f8ae7dfc572981a2491e7757fafbc0d8 Mon Sep 17 00:00:00 2001 From: Aleksander Chlebowski <114988527+chlebowa@users.noreply.github.com> Date: Wed, 22 Nov 2023 09:19:51 +0100 Subject: [PATCH 01/36] 904 teal_data in teal_module (#924) Closes #904 Added `as_tdata` function to convert the data object received by modules from `teal_data` to `tdata` class. Modified `srv_nested_tabs.teal_module` now returns a `teal_data`. To make a module handle a `teal_data` object without (much) modification, the incoming `data` argument should be downgraded to the old class. ``` data <- as_tdata(data) ``` Also modified `example_module` to handle `teal_data` objects. --------- Co-authored-by: go_gonzo Co-authored-by: Dony Unardi Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- NAMESPACE | 1 + NEWS.md | 1 + R/dummy_functions.R | 12 ++--- R/init.R | 9 ++-- R/module_nested_tabs.R | 46 ++++++------------ R/module_teal_with_splash.R | 1 - R/modules.R | 4 +- R/tdata.R | 48 ++++++++++++++++++ _pkgdown.yml | 1 + man/dot-datasets_to_data.Rd | 11 +---- man/example_module.Rd | 4 +- man/init.Rd | 9 ++-- man/module.Rd | 2 +- man/modules.Rd | 2 +- man/tdata.Rd | 3 ++ man/tdata_deprecation.Rd | 32 ++++++++++++ tests/testthat/test-module_nested_tabs.R | 62 ++++++------------------ tests/testthat/test-tdata.R | 48 +++++++++++++++++- 18 files changed, 182 insertions(+), 114 deletions(-) create mode 100644 man/tdata_deprecation.Rd diff --git a/NAMESPACE b/NAMESPACE index 9bc9a00682..a40a7d18fa 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -18,6 +18,7 @@ S3method(ui_nested_tabs,teal_modules) export("%>%") export(TealReportCard) export(as.teal_slices) +export(as_tdata) export(example_module) export(get_code_tdata) export(get_metadata) diff --git a/NEWS.md b/NEWS.md index 8926433360..3a90a09e4c 100644 --- a/NEWS.md +++ b/NEWS.md @@ -5,6 +5,7 @@ * `data` argument in `init` now accepts `teal_data` and `teal_data_module`. * Added `landing_popup_module` function which creates a module that will display a popup when the app starts. The popup will block access to the app until it is dismissed. * Filter state snapshots can now be uploaded from file. See `?snapshot`. +* Added `as_tdata` function to facilitate migration of modules to the new `teal_data` class. ### Miscellaneous diff --git a/R/dummy_functions.R b/R/dummy_functions.R index 608c1a3241..5cbd894117 100644 --- a/R/dummy_functions.R +++ b/R/dummy_functions.R @@ -79,8 +79,8 @@ example_datasets <- function() { # nolint #' @examples #' app <- init( #' data = teal_data( -#' dataset("IRIS", iris), -#' dataset("MTCARS", mtcars) +#' IRIS = iris, +#' MTCARS = mtcars #' ), #' modules = example_module() #' ) @@ -93,12 +93,12 @@ example_module <- function(label = "example teal module", datanames = "all") { module( label, server = function(id, data) { - checkmate::assert_class(data, "tdata") + checkmate::assert_class(data(), "teal_data") moduleServer(id, function(input, output, session) { - output$text <- renderPrint(data[[input$dataname]]()) + output$text <- renderPrint(data()[[input$dataname]]) teal.widgets::verbatim_popup_srv( id = "rcode", - verbatim_content = attr(data, "code")(), + verbatim_content = reactive(teal.code::get_code(data())), title = "Association Plot" ) }) @@ -108,7 +108,7 @@ example_module <- function(label = "example teal module", datanames = "all") { teal.widgets::standard_layout( output = verbatimTextOutput(ns("text")), encoding = div( - selectInput(ns("dataname"), "Choose a dataset", choices = names(data)), + selectInput(ns("dataname"), "Choose a dataset", choices = teal.data::datanames(data)), teal.widgets::verbatim_popup_ui(ns("rcode"), "Show R code") ) ) diff --git a/R/init.R b/R/init.R index 8035815e7d..0370cc441f 100644 --- a/R/init.R +++ b/R/init.R @@ -54,13 +54,10 @@ #' @include modules.R #' #' @examples -#' new_iris <- transform(iris, id = seq_len(nrow(iris))) -#' new_mtcars <- transform(mtcars, id = seq_len(nrow(mtcars))) -#' #' app <- init( #' data = teal_data( -#' dataset("new_iris", new_iris), -#' dataset("new_mtcars", new_mtcars), +#' new_iris = transform(iris, id = seq_len(nrow(iris))), +#' new_mtcars = transform(mtcars, id = seq_len(nrow(mtcars))), #' code = " #' new_iris <- transform(iris, id = seq_len(nrow(iris))) #' new_mtcars <- transform(mtcars, id = seq_len(nrow(mtcars))) @@ -78,7 +75,7 @@ #' "Iris Sepal.Length histogram", #' server = function(input, output, session, data) { #' output$hist <- renderPlot( -#' hist(data[["new_iris"]]()$Sepal.Length) +#' hist(data()[["new_iris"]]$Sepal.Length) #' ) #' }, #' ui = function(id, ...) { diff --git a/R/module_nested_tabs.R b/R/module_nested_tabs.R index 0a35f7aaf5..608ac6dbb6 100644 --- a/R/module_nested_tabs.R +++ b/R/module_nested_tabs.R @@ -243,7 +243,7 @@ srv_nested_tabs.teal_module <- function(id, datasets, modules, is_module_specifi } if (is_arg_used(modules$server, "data")) { - data <- .datasets_to_data(modules, datasets, trigger_data) + data <- eventReactive(trigger_data(), .datasets_to_data(modules, datasets)) args <- c(args, data = list(data)) } @@ -285,17 +285,12 @@ srv_nested_tabs.teal_module <- function(id, datasets, modules, is_module_specifi #' #' @param module (`teal_module`) module where needed filters are taken from #' @param datasets (`FilteredData`) object where needed data are taken from -#' @param trigger_data (`reactiveVal`) to trigger getting the filtered data -#' @return list of reactive datasets with following attributes: -#' - `code` (`character`) containing datasets reproducible code. -#' - `join_keys` (`join_keys`) containing relationships between datasets. -#' - `metadata` (`list`) containing metadata of datasets. +#' @return A `tdata` object. #' #' @keywords internal -.datasets_to_data <- function(module, datasets, trigger_data = reactiveVal(1L)) { +.datasets_to_data <- function(module, datasets) { checkmate::assert_class(module, "teal_module") checkmate::assert_class(datasets, "FilteredData") - checkmate::assert_class(trigger_data, "reactiveVal") datanames <- if (is.null(module$datanames) || identical(module$datanames, "all")) { datasets$datanames() @@ -304,31 +299,20 @@ srv_nested_tabs.teal_module <- function(id, datasets, modules, is_module_specifi } # list of reactive filtered data - data <- sapply( - datanames, - function(x) eventReactive(trigger_data(), datasets$get_data(x, filtered = TRUE)), - simplify = FALSE - ) + data <- sapply(datanames, function(x) datasets$get_data(x, filtered = TRUE), simplify = FALSE) hashes <- calculate_hashes(datanames, datasets) - metadata <- lapply(datanames, datasets$get_metadata) - names(metadata) <- datanames - - new_tdata( - data, - eventReactive( - trigger_data(), - { - c( - get_rcode_str_install(), - get_rcode_libraries(), - get_datasets_code(datanames, datasets, hashes), - teal.slice::get_filter_expr(datasets, datanames) - ) - } - ), - datasets$get_join_keys(), - metadata + + code <- c( + get_rcode_str_install(), + get_rcode_libraries(), + get_datasets_code(datanames, datasets, hashes), + teal.slice::get_filter_expr(datasets, datanames) + ) + + do.call( + teal.data::teal_data, + args = c(data, code = list(code), join_keys = list(datasets$get_join_keys()[datanames])) ) } diff --git a/R/module_teal_with_splash.R b/R/module_teal_with_splash.R index e8a5ae92be..99621ad4cd 100644 --- a/R/module_teal_with_splash.R +++ b/R/module_teal_with_splash.R @@ -29,7 +29,6 @@ ui_teal_with_splash <- function(id, # We use delayed loading in all cases, even when the data does not need to be fetched. # This has the benefit that when filtering the data takes a lot of time initially, the # Shiny app does not time out. - splash_ui <- if (inherits(data, "teal_data_module")) { data$ui(ns("teal_data_module")) } else if (inherits(data, "teal_data")) { diff --git a/R/modules.R b/R/modules.R index 3f4d191437..97644280ba 100644 --- a/R/modules.R +++ b/R/modules.R @@ -22,7 +22,7 @@ #' library(shiny) #' #' app <- init( -#' data = teal_data(dataset("iris", iris)), +#' data = teal_data(iris = iris), #' modules = modules( #' label = "Modules", #' modules( @@ -199,7 +199,7 @@ is_arg_used <- function(modules, arg) { #' library(shiny) #' #' app <- init( -#' data = teal_data(dataset("iris", iris)), +#' data = teal_data(iris = iris), #' modules = list( #' module( #' label = "Module", diff --git a/R/tdata.R b/R/tdata.R index 1806b68d23..013df0b68f 100644 --- a/R/tdata.R +++ b/R/tdata.R @@ -20,6 +20,9 @@ #' @param metadata A `named list` each element contains a list of metadata about the named data.frame #' Each element of these list should be atomic and length one. #' @return A `tdata` object +#' +#' @seealso `as_tdata` +#' #' @examples #' #' data <- new_tdata( @@ -157,3 +160,48 @@ get_metadata.tdata <- function(data, dataname) { get_metadata.default <- function(data, dataname) { stop("get_metadata function not implemented for this object") } + + +#' Downgrade `teal_data` objects in modules for compatibility. +#' +#' Convert `teal_data` to `tdata` in `teal` modules. +#' +#' Recent changes in `teal` cause modules to fail because modules expect a `tdata` object +#' to be passed to the `data` argument but instead they receive a `teal_data` object, +#' which is additionally wrapped in a reactive expression in the server functions. +#' In order to easily adapt such modules without a proper refactor, +#' use this function to downgrade the `data` argument. +#' +#' @param x data object, either `tdata` or `teal_data`, the latter possibly in a reactive expression +#' +#' @return Object of class `tdata`. +#' +#' @examples +#' td <- teal_data() +#' td <- within(td, iris <- iris) %>% within(mtcars <- mtcars) +#' td +#' as_tdata(td) +#' as_tdata(reactive(td)) +#' +#' @export +#' @rdname tdata_deprecation +#' +as_tdata <- function(x) { + if (inherits(x, "tdata")) { + return(x) + } + if (is.reactive(x)) { + checkmate::assert_class(isolate(x()), "teal_data") + datanames <- isolate(teal.data::datanames(x())) + datasets <- sapply(datanames, function(dataname) reactive(x()[[dataname]]), simplify = FALSE) + code <- reactive(teal.code::get_code(x())) + join_keys <- isolate(teal.data::join_keys(x())) + } else if (inherits(x, "teal_data")) { + datanames <- teal.data::datanames(x) + datasets <- sapply(datanames, function(dataname) reactive(x[[dataname]]), simplify = FALSE) + code <- reactive(teal.code::get_code(x)) + join_keys <- isolate(teal.data::join_keys(x)) + } + + new_tdata(data = datasets, code = code, join_keys = join_keys) +} diff --git a/_pkgdown.yml b/_pkgdown.yml index eb95ee303d..4adcb1baf3 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -114,6 +114,7 @@ reference: - landing_popup_module - title: Functions for Module Developers contents: + - as_tdata - tdata - get_code_tdata - get_metadata diff --git a/man/dot-datasets_to_data.Rd b/man/dot-datasets_to_data.Rd index c484adeb75..292a23d7c4 100644 --- a/man/dot-datasets_to_data.Rd +++ b/man/dot-datasets_to_data.Rd @@ -4,22 +4,15 @@ \alias{.datasets_to_data} \title{Convert \code{FilteredData} to reactive list of datasets of the \code{tdata} type.} \usage{ -.datasets_to_data(module, datasets, trigger_data = reactiveVal(1L)) +.datasets_to_data(module, datasets) } \arguments{ \item{module}{(\code{teal_module}) module where needed filters are taken from} \item{datasets}{(\code{FilteredData}) object where needed data are taken from} - -\item{trigger_data}{(\code{reactiveVal}) to trigger getting the filtered data} } \value{ -list of reactive datasets with following attributes: -\itemize{ -\item \code{code} (\code{character}) containing datasets reproducible code. -\item \code{join_keys} (\code{join_keys}) containing relationships between datasets. -\item \code{metadata} (\code{list}) containing metadata of datasets. -} +A \code{tdata} object. } \description{ Converts \code{FilteredData} object to \code{tdata} object containing datasets needed for a specific module. diff --git a/man/example_module.Rd b/man/example_module.Rd index 9a0c88862b..a0291c9c63 100644 --- a/man/example_module.Rd +++ b/man/example_module.Rd @@ -25,8 +25,8 @@ A \code{teal} module which can be included in the \code{modules} argument to \co \examples{ app <- init( data = teal_data( - dataset("IRIS", iris), - dataset("MTCARS", mtcars) + IRIS = iris, + MTCARS = mtcars ), modules = example_module() ) diff --git a/man/init.Rd b/man/init.Rd index f03437f1b3..1b74728baf 100644 --- a/man/init.Rd +++ b/man/init.Rd @@ -67,13 +67,10 @@ This is a wrapper function around the \code{module_teal.R} functions. Unless you an end-user, don't use this function, but instead this module. } \examples{ -new_iris <- transform(iris, id = seq_len(nrow(iris))) -new_mtcars <- transform(mtcars, id = seq_len(nrow(mtcars))) - app <- init( data = teal_data( - dataset("new_iris", new_iris), - dataset("new_mtcars", new_mtcars), + new_iris = transform(iris, id = seq_len(nrow(iris))), + new_mtcars = transform(mtcars, id = seq_len(nrow(mtcars))), code = " new_iris <- transform(iris, id = seq_len(nrow(iris))) new_mtcars <- transform(mtcars, id = seq_len(nrow(mtcars))) @@ -91,7 +88,7 @@ app <- init( "Iris Sepal.Length histogram", server = function(input, output, session, data) { output$hist <- renderPlot( - hist(data[["new_iris"]]()$Sepal.Length) + hist(data()[["new_iris"]]$Sepal.Length) ) }, ui = function(id, ...) { diff --git a/man/module.Rd b/man/module.Rd index 9a81569787..a144f8250b 100644 --- a/man/module.Rd +++ b/man/module.Rd @@ -82,7 +82,7 @@ This function embeds a \code{shiny} module inside a \code{teal} application. One library(shiny) app <- init( - data = teal_data(dataset("iris", iris)), + data = teal_data(iris = iris), modules = list( module( label = "Module", diff --git a/man/modules.Rd b/man/modules.Rd index 996f468fd9..dbcc71d7f4 100644 --- a/man/modules.Rd +++ b/man/modules.Rd @@ -46,7 +46,7 @@ shapes the navigation panel of a \code{teal} application. library(shiny) app <- init( - data = teal_data(dataset("iris", iris)), + data = teal_data(iris = iris), modules = modules( label = "Modules", modules( diff --git a/man/tdata.Rd b/man/tdata.Rd index d686b0f621..1f7042407b 100644 --- a/man/tdata.Rd +++ b/man/tdata.Rd @@ -62,3 +62,6 @@ isolate(get_code(data)) get_metadata(data, "iris") } +\seealso{ +\code{as_tdata} +} diff --git a/man/tdata_deprecation.Rd b/man/tdata_deprecation.Rd new file mode 100644 index 0000000000..7c9a1a570d --- /dev/null +++ b/man/tdata_deprecation.Rd @@ -0,0 +1,32 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/tdata.R +\name{as_tdata} +\alias{as_tdata} +\title{Downgrade \code{teal_data} objects in modules for compatibility.} +\usage{ +as_tdata(x) +} +\arguments{ +\item{x}{data object, either \code{tdata} or \code{teal_data}, the latter possibly in a reactive expression} +} +\value{ +Object of class \code{tdata}. +} +\description{ +Convert \code{teal_data} to \code{tdata} in \code{teal} modules. +} +\details{ +Recent changes in \code{teal} cause modules to fail because modules expect a \code{tdata} object +to be passed to the \code{data} argument but instead they receive a \code{teal_data} object, +which is additionally wrapped in a reactive expression in the server functions. +In order to easily adapt such modules without a proper refactor, +use this function to downgrade the \code{data} argument. +} +\examples{ +td <- teal_data() +td <- within(td, iris <- iris) \%>\% within(mtcars <- mtcars) +td +as_tdata(td) +as_tdata(reactive(td)) + +} diff --git a/tests/testthat/test-module_nested_tabs.R b/tests/testthat/test-module_nested_tabs.R index 87b2b78ea4..0513c797c5 100644 --- a/tests/testthat/test-module_nested_tabs.R +++ b/tests/testthat/test-module_nested_tabs.R @@ -214,7 +214,10 @@ testthat::test_that("srv_nested_tabs.teal_module does not pass data if not in th testthat::test_that("srv_nested_tabs.teal_module does pass data if in the args explicitly", { module <- module( server = function(id, data, ...) { - moduleServer(id, function(input, output, session) checkmate::assert_class(data, "tdata")) + moduleServer(id, function(input, output, session) { + checkmate::assert_class(data, "reactive") + checkmate::assert_class(data(), "teal_data") + }) }, datanames = NULL ) @@ -388,33 +391,6 @@ testthat::test_that("srv_nested_tabs.teal_module passes filter_panel_api to the }) -testthat::test_that(".datasets_to_data accepts a reactiveVal as trigger_data input", { - datasets <- get_example_filtered_data() - datasets$set_filter_state( - teal.slice:::teal_slices( - teal.slice:::teal_slice(dataname = "d1", varname = "val", selected = c(1, 2)) - ) - ) - module <- test_module_wdata(datanames = c("d1", "d2")) - trigger_data <- reactiveVal(1L) - testthat::expect_silent(shiny::isolate(.datasets_to_data(module, datasets, trigger_data))) -}) - -testthat::test_that(".datasets_to_data throws error if trigger_data is not a reactiveVal function", { - datasets <- get_example_filtered_data() - datasets$set_filter_state( - teal.slice:::teal_slices( - teal.slice:::teal_slice(dataname = "d1", varname = "val", selected = c(1, 2)) - ) - ) - module <- test_module_wdata(datanames = "all") - trigger_data <- 1 - testthat::expect_error( - shiny::isolate(.datasets_to_data(module, datasets, trigger_data)), - "Must inherit from class 'reactiveVal', but has class 'numeric'." - ) -}) - testthat::test_that(".datasets_to_data returns data which is filtered", { datasets <- get_example_filtered_data() datasets$set_filter_state( @@ -423,12 +399,11 @@ testthat::test_that(".datasets_to_data returns data which is filtered", { ) ) module <- test_module_wdata(datanames = c("d1", "d2")) - trigger_data <- reactiveVal(1L) - data <- shiny::isolate(.datasets_to_data(module, datasets, trigger_data)) + data <- shiny::isolate(.datasets_to_data(module, datasets)) - d1_filtered <- shiny::isolate(data[["d1"]]()) + d1_filtered <- data[["d1"]] testthat::expect_equal(d1_filtered, data.frame(id = 1:2, pk = 2:3, val = 1:2)) - d2_filtered <- shiny::isolate(data[["d2"]]()) + d2_filtered <- data[["d2"]] testthat::expect_equal(d2_filtered, data.frame(id = 1:5, value = 1:5)) }) @@ -436,18 +411,16 @@ testthat::test_that(".datasets_to_data returns data which is filtered", { testthat::test_that(".datasets_to_data returns only data requested by modules$datanames", { datasets <- get_example_filtered_data() module <- test_module_wdata(datanames = "d1") - trigger_data <- reactiveVal(1L) - data <- .datasets_to_data(module, datasets, trigger_data) - testthat::expect_equal(shiny::isolate(names(data)), "d1") + data <- shiny::isolate(.datasets_to_data(module, datasets)) + testthat::expect_equal(datanames(data), "d1") }) -testthat::test_that(".datasets_to_data returns tdata object", { +testthat::test_that(".datasets_to_data returns teal_data object", { datasets <- get_example_filtered_data() module <- test_module_wdata(datanames = c("d1", "d2")) - trigger_data <- reactiveVal(1L) - data <- .datasets_to_data(module, datasets, trigger_data) + data <- shiny::isolate(.datasets_to_data(module, datasets)) - testthat::expect_s3_class(data, "tdata") + testthat::expect_s4_class(data, "teal_data") # join_keys testthat::expect_equal( @@ -456,8 +429,9 @@ testthat::test_that(".datasets_to_data returns tdata object", { ) # code + skip("skipped until we resolve handling code in teal.data:::new_teal_data") testthat::expect_equal( - shiny::isolate(get_code(data)), + teal.code::get_code(data), c( get_rcode_str_install(), get_rcode_libraries(), @@ -469,14 +443,6 @@ testthat::test_that(".datasets_to_data returns tdata object", { "" ) ) - - # metadata - testthat::expect_equal( - get_metadata(data, "d1"), - list(A = 1) - ) - - testthat::expect_null(get_metadata(data, "d2")) }) testthat::test_that("calculate_hashes takes a FilteredData and vector of datanames as input", { diff --git a/tests/testthat/test-tdata.R b/tests/testthat/test-tdata.R index 6511a35bc6..dd48dbdd3d 100644 --- a/tests/testthat/test-tdata.R +++ b/tests/testthat/test-tdata.R @@ -199,7 +199,7 @@ testthat::test_that("tdata2env throws error if argument is not tdata", { testthat::expect_error(tdata2env(iris), "Must inherit from class 'tdata'") }) -# ---- get_join_keys ---- +# ---- join_keys ---- testthat::test_that("join_keys returns NULL if no join_keys object exists inside tdata", { my_tdata <- new_tdata(data = list(iris = iris, mae = reactive(miniACC))) testthat::expect_null(join_keys(my_tdata)) @@ -218,3 +218,49 @@ testthat::test_that("join_keys returns join_keys object if it exists inside tdat testthat::expect_equal(join_keys(my_tdata), jk) }) + + +# as_tdata ---- +code <- c("iris <- iris", "mtcars <- mtcars") +data_tdata <- teal::new_tdata(list(iris = iris, mtcars = mtcars), code) +data_teal_data <- teal.data::teal_data(iris = iris, mtcars = mtcars, code = code) +data_reactive <- reactive(teal.data::teal_data(iris = iris, mtcars = mtcars, code = code)) + +testthat::test_that("as_tdata accepts all possible inputs", { + testthat::expect_no_error(as_tdata(data_tdata)) + testthat::expect_no_error(as_tdata(data_teal_data)) + testthat::expect_no_error(as_tdata(data_reactive)) +}) + +testthat::test_that("as_tdata always returns tdata object", { + data_tdata_downgraded <- as_tdata(data_tdata) + data_teal_data_downgraded <- as_tdata(data_teal_data) + data_reactive_downgraded <- as_tdata(data_teal_data) + + testthat::expect_s3_class(data_tdata_downgraded, "tdata") + testthat::expect_s3_class(data_teal_data_downgraded, "tdata") + testthat::expect_s3_class(data_reactive_downgraded, "tdata") +}) + +testthat::test_that("datasets are maintained during conversion", { + data_tdata_downgraded <- as_tdata(data_teal_data) + + datanames_teal_data <- sort(teal.data::datanames(data_teal_data)) + datanames_tdata <- sort(names(data_tdata_downgraded)) + + testthat::expect_identical(datanames_teal_data, datanames_tdata) + + datasets_teal_data <- sapply(datanames_teal_data, function(x) teal.code::get_var(data_teal_data, x)) + datasets_tdata <- sapply(datanames_tdata, function(x) shiny::isolate(data_tdata_downgraded[[x]]())) + + testthat::expect_identical(datasets_teal_data, datasets_tdata) +}) + +testthat::test_that("code is maintained during conversion", { + data_teal_data_downgraded <- as_tdata(data_teal_data) + skip("skipped until we resolve handling code in teal.data:::new_teal_data") + testthat::expect_identical( + teal.code::get_code(data_teal_data), + shiny::isolate(attr(data_teal_data_downgraded, "code")()) + ) +}) From 11a786a358af2169629a76439ddbf6abd1ee17d7 Mon Sep 17 00:00:00 2001 From: go_gonzo Date: Wed, 22 Nov 2023 15:24:37 +0100 Subject: [PATCH 02/36] remove unnecessary --- R/zzz.R | 3 --- 1 file changed, 3 deletions(-) diff --git a/R/zzz.R b/R/zzz.R index fbc9c756d9..8fd9ce1edd 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -23,9 +23,6 @@ ) } -# Use non-exported function(s) from teal.slice. -# This is a temporary measure and will be removed two release cycles from now (now meaning 0.13.0). -list_to_teal_slices <- getFromNamespace("list_to_teal_slices", "teal.slice") # This one is here because setdiff_teal_slice should not be exported from teal.slice. setdiff_teal_slices <- getFromNamespace("setdiff_teal_slices", "teal.slice") # This one is here because it is needed by c.teal_slices but we don't want it exported from teal.slice. From 990d2a26ce84cf7537b62cb74fe964f08163f30e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Thu, 23 Nov 2023 12:31:47 +0100 Subject: [PATCH 03/36] docs: corrects teal_data_module example and updated documentation --- NAMESPACE | 2 +- R/teal_data_module.R | 2 +- man/init.Rd | 4 ++-- man/srv_teal_with_splash.Rd | 4 ++-- man/tdata.Rd | 2 +- man/teal_data_module.Rd | 2 +- man/ui_teal_with_splash.Rd | 4 ++-- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index a40a7d18fa..26c72ba180 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,7 +1,6 @@ # Generated by roxygen2: do not edit by hand S3method(c,teal_slices) -S3method(get_code,tdata) S3method(get_metadata,default) S3method(get_metadata,tdata) S3method(join_keys,tdata) @@ -20,6 +19,7 @@ export(TealReportCard) export(as.teal_slices) export(as_tdata) export(example_module) +export(get_code.tdata) export(get_code_tdata) export(get_metadata) export(init) diff --git a/R/teal_data_module.R b/R/teal_data_module.R index 5f63395fca..465e240eb2 100644 --- a/R/teal_data_module.R +++ b/R/teal_data_module.R @@ -34,7 +34,7 @@ #' dataset2 <- mtcars #' } #' ) -#' datanames(data) <- c("iris", "mtcars") +#' datanames(data) <- c("dataset1", "dataset2") #' #' data #' }) diff --git a/man/init.Rd b/man/init.Rd index 228be6b2cf..d5ad532ec7 100644 --- a/man/init.Rd +++ b/man/init.Rd @@ -18,8 +18,8 @@ init( \item{data}{(\code{TealData} or \code{TealDataset} or \code{TealDatasetConnector} or \code{list} or \code{data.frame} or \code{MultiAssayExperiment}, \code{teal_data}, \code{teal_data_module})\cr \code{R6} object as returned by \code{\link[teal.data:cdisc_data]{teal.data::cdisc_data()}}, \code{\link[teal.data:teal_data]{teal.data::teal_data()}}, -\code{\link[teal.data:cdisc_dataset]{teal.data::cdisc_dataset()}}, \code{\link[teal.data:dataset]{teal.data::dataset()}}, \code{\link[teal.data:dataset_connector]{teal.data::dataset_connector()}} or -\code{\link[teal.data:cdisc_dataset_connector]{teal.data::cdisc_dataset_connector()}} or \code{\link[=teal_data_module]{teal_data_module()}} or a single \code{data.frame} or +\code{\link[teal.data:TealData]{teal.data::cdisc_dataset()}}, \code{\link[teal.data:TealData]{teal.data::dataset()}}, \code{\link[teal.data:TealData]{teal.data::dataset_connector()}} or +\code{\link[teal.data:TealData]{teal.data::cdisc_dataset_connector()}} or \code{\link[=teal_data_module]{teal_data_module()}} or a single \code{data.frame} or a \code{MultiAssayExperiment} or a list of the previous objects or function returning a named list. NOTE: teal does not guarantee reproducibility of the code when names of the list elements diff --git a/man/srv_teal_with_splash.Rd b/man/srv_teal_with_splash.Rd index 9b1d4312d1..9f2a11ec85 100644 --- a/man/srv_teal_with_splash.Rd +++ b/man/srv_teal_with_splash.Rd @@ -17,8 +17,8 @@ is then preferred to this function.} \item{data}{(\code{TealData} or \code{TealDataset} or \code{TealDatasetConnector} or \code{list} or \code{data.frame} or \code{MultiAssayExperiment}, \code{teal_data}, \code{teal_data_module})\cr \code{R6} object as returned by \code{\link[teal.data:cdisc_data]{teal.data::cdisc_data()}}, \code{\link[teal.data:teal_data]{teal.data::teal_data()}}, -\code{\link[teal.data:cdisc_dataset]{teal.data::cdisc_dataset()}}, \code{\link[teal.data:dataset]{teal.data::dataset()}}, \code{\link[teal.data:dataset_connector]{teal.data::dataset_connector()}} or -\code{\link[teal.data:cdisc_dataset_connector]{teal.data::cdisc_dataset_connector()}} or \code{\link[=teal_data_module]{teal_data_module()}} or a single \code{data.frame} or +\code{\link[teal.data:TealData]{teal.data::cdisc_dataset()}}, \code{\link[teal.data:TealData]{teal.data::dataset()}}, \code{\link[teal.data:TealData]{teal.data::dataset_connector()}} or +\code{\link[teal.data:TealData]{teal.data::cdisc_dataset_connector()}} or \code{\link[=teal_data_module]{teal_data_module()}} or a single \code{data.frame} or a \code{MultiAssayExperiment} or a list of the previous objects or function returning a named list. NOTE: teal does not guarantee reproducibility of the code when names of the list elements diff --git a/man/tdata.Rd b/man/tdata.Rd index 1f7042407b..c85940e057 100644 --- a/man/tdata.Rd +++ b/man/tdata.Rd @@ -8,7 +8,7 @@ \usage{ new_tdata(data, code = "", join_keys = NULL, metadata = NULL) -\method{get_code}{tdata}(x, ...) +get_code.tdata(x, ...) } \arguments{ \item{data}{A \verb{named list} of \code{data.frames} (or \code{MultiAssayExperiment}) diff --git a/man/teal_data_module.Rd b/man/teal_data_module.Rd index 3eb672bcda..6bf39fb807 100644 --- a/man/teal_data_module.Rd +++ b/man/teal_data_module.Rd @@ -45,7 +45,7 @@ data <- teal_data_module( dataset2 <- mtcars } ) - datanames(data) <- c("iris", "mtcars") + datanames(data) <- c("dataset1", "dataset2") data }) diff --git a/man/ui_teal_with_splash.Rd b/man/ui_teal_with_splash.Rd index 29396ed74c..0fe8a246a7 100644 --- a/man/ui_teal_with_splash.Rd +++ b/man/ui_teal_with_splash.Rd @@ -19,8 +19,8 @@ module id} \item{data}{(\code{TealData} or \code{TealDataset} or \code{TealDatasetConnector} or \code{list} or \code{data.frame} or \code{MultiAssayExperiment}, \code{teal_data}, \code{teal_data_module})\cr \code{R6} object as returned by \code{\link[teal.data:cdisc_data]{teal.data::cdisc_data()}}, \code{\link[teal.data:teal_data]{teal.data::teal_data()}}, -\code{\link[teal.data:cdisc_dataset]{teal.data::cdisc_dataset()}}, \code{\link[teal.data:dataset]{teal.data::dataset()}}, \code{\link[teal.data:dataset_connector]{teal.data::dataset_connector()}} or -\code{\link[teal.data:cdisc_dataset_connector]{teal.data::cdisc_dataset_connector()}} or \code{\link[=teal_data_module]{teal_data_module()}} or a single \code{data.frame} or +\code{\link[teal.data:TealData]{teal.data::cdisc_dataset()}}, \code{\link[teal.data:TealData]{teal.data::dataset()}}, \code{\link[teal.data:TealData]{teal.data::dataset_connector()}} or +\code{\link[teal.data:TealData]{teal.data::cdisc_dataset_connector()}} or \code{\link[=teal_data_module]{teal_data_module()}} or a single \code{data.frame} or a \code{MultiAssayExperiment} or a list of the previous objects or function returning a named list. NOTE: teal does not guarantee reproducibility of the code when names of the list elements From e9b3b7e450b2f00548ac7b3634eee583c276ccf2 Mon Sep 17 00:00:00 2001 From: Aleksander Chlebowski Date: Fri, 24 Nov 2023 10:44:44 +0100 Subject: [PATCH 04/36] fix vignette --- vignettes/filter-panel.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/filter-panel.Rmd b/vignettes/filter-panel.Rmd index 55c4acd127..2b30650d97 100644 --- a/vignettes/filter-panel.Rmd +++ b/vignettes/filter-panel.Rmd @@ -84,7 +84,7 @@ To achieve the described setup, one must set the `module_specific` argument to ` library(teal) app <- init( - data = list(mtcars = mtcars), + data = teal_data(mtcars = mtcars), modules = modules( example_module(label = "module 1"), example_module(label = "module 2"), From 14df20dfff74cb4c69f9df7ee171a4d0f4578dfd Mon Sep 17 00:00:00 2001 From: kartikeya kirar Date: Wed, 29 Nov 2023 13:03:53 +0530 Subject: [PATCH 05/36] `get_code` to return concatenated code string (#976) part of https://github.com/insightsengineering/teal.code/pull/176 --- vignettes/adding-support-for-reporting.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/adding-support-for-reporting.Rmd b/vignettes/adding-support-for-reporting.Rmd index 6d4a8001e9..70544ea002 100644 --- a/vignettes/adding-support-for-reporting.Rmd +++ b/vignettes/adding-support-for-reporting.Rmd @@ -277,7 +277,7 @@ example_reporter_module <- function(label = "Example") { card$append_text("Module Table", "header3") card$append_table(table_q()[["result"]]) card$append_text("Show R Code", "header3") - card$append_text(paste(teal.code::get_code(table_q()), collapse = "\n"), "verbatim") + card$append_text(teal.code::get_code(table_q()), "verbatim") if (!comment == "") { card$append_text("Comment", "header3") card$append_text(comment) From 49eca092bb1426b7e87bd70914a1360066247f4e Mon Sep 17 00:00:00 2001 From: Aleksander Chlebowski <114988527+chlebowa@users.noreply.github.com> Date: Thu, 30 Nov 2023 09:24:49 +0100 Subject: [PATCH 06/36] vignette themes (#978) adapted to `teal_data` class --- _pkgdown.yml | 2 +- ...hemes.Rmd => bootstrap-themes-in-teal.Rmd} | 33 ++++++------------- 2 files changed, 11 insertions(+), 24 deletions(-) rename vignettes/{teal-bs-themes.Rmd => bootstrap-themes-in-teal.Rmd} (92%) diff --git a/_pkgdown.yml b/_pkgdown.yml index 4adcb1baf3..93e03f0ec4 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -54,7 +54,7 @@ articles: contents: - filter-panel - teal-options - - teal-bs-themes + - bootstrap-themes-in-teal - title: Data in teal Apps navbar: Data in teal Apps contents: diff --git a/vignettes/teal-bs-themes.Rmd b/vignettes/bootstrap-themes-in-teal.Rmd similarity index 92% rename from vignettes/teal-bs-themes.Rmd rename to vignettes/bootstrap-themes-in-teal.Rmd index 7c138def60..72a5b25691 100644 --- a/vignettes/teal-bs-themes.Rmd +++ b/vignettes/bootstrap-themes-in-teal.Rmd @@ -98,8 +98,8 @@ library(teal) app <- init( data = teal_data(IRIS = iris), # nolint - filter = list(IRIS = list(Sepal.Length = c(5, 7))), - modules = list(example_module(), example_module()), + filter = teal_slices(teal_slice("IRIS", "Sepal.Length", selected = c(5, 7))), + modules = modules(example_module(), example_module()), header = "My first teal application" ) @@ -108,9 +108,7 @@ bslib::run_with_themer(shinyApp(app$ui, app$server)) This gives us the following. -```{r echo = FALSE} -knitr::include_graphics("images/bs-launch.png") -``` + Note the `Theme Customizer` section on the right hand side. This was added by `bslib` and is how we customize our theme. @@ -118,9 +116,7 @@ Note the `Theme Customizer` section on the right hand side. This was added by `b Instead of starting from scratch, we want to start with a [`Bootswatch`](https://bootswatch.com/) theme. Let us select the Minty theme in the "Overall theme" drop-down. -```{r echo = FALSE} -knitr::include_graphics("images/bs-theme-set.png") -``` + `bslib` has updated our `CSS` styles to use our new theme, including the `customizer` theme. Additionally if we look at our R console, we will see @@ -135,16 +131,11 @@ This is a helpful guide that provides code to update our theme. For `teal` appli Our base theme (Minty) is close to what we want but let's make a few modifications. To start, we will increase the base font size. To do this, we choose the "Fonts" section of the `customizer` theme and then set a value in the "Base font size" input. We use 1.25 here, which means all our fonts will be increased by a factor of 1.25. If we check the R console, we will see `bslib` has printed `bs_theme_update(theme, font_scale = 1.25, bootswatch = "minty")`, which now includes our font size adjustment. -```{r echo = FALSE} -knitr::include_graphics("images/bs-font-size.png") -``` + Finally, suppose we do not want borders to be rounded. In our `customizer` theme, we can go to "Options" and then uncheck the "Rounded corners" box. - -```{r echo = FALSE} -knitr::include_graphics("images/bs-corners.png") -``` + As expected, our corners are no longer rounded. If we look at our R console, we will now see `bs_theme_update(theme, font_scale = 1.25, `enable-rounded` = FALSE, bootswatch = "minty")`. @@ -165,11 +156,9 @@ options( library(teal) app <- init( - data = teal_data( - dataset("IRIS", iris) - ), - filter = list(IRIS = list(Sepal.Length = c(5, 7))), - modules = list(example_module(), example_module()) + data = teal_data(IRIS = iris), + filter = teal_slices(teal_slice("IRIS", "Sepal.Length", selected = c(5, 7))), + modules = modules(example_module(), example_module()) ) shinyApp(app$ui, app$server) @@ -177,9 +166,7 @@ shinyApp(app$ui, app$server) Now the application has our custom theme applied. -```{r echo = FALSE} -knitr::include_graphics("images/bs-final.png") -``` + Please note the interactive themer only contains the mostly commonly applied options. For more customization options, review the `bslib` documentation. From 5bea317dd723db65e90907edf183c6f7cf03c5ff Mon Sep 17 00:00:00 2001 From: Aleksander Chlebowski <114988527+chlebowa@users.noreply.github.com> Date: Thu, 30 Nov 2023 09:25:09 +0100 Subject: [PATCH 07/36] vignette filter panel (#981) cosmetic changes --- vignettes/filter-panel.Rmd | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/vignettes/filter-panel.Rmd b/vignettes/filter-panel.Rmd index 2b30650d97..beb360aa61 100644 --- a/vignettes/filter-panel.Rmd +++ b/vignettes/filter-panel.Rmd @@ -10,19 +10,19 @@ vignette: > ## `teal` Apps With the Filter Panel -The filter panel is an integral part of all `teal` applications and is included on the right side. Based on the selections made in the filter panel, filter expressions are executed before passing data to `teal` modules. The technical details of the filter panel are extensively described in [`teal.slice` documentation](https://insightsengineering.github.io/teal.slice/latest-tag/). +The filter panel is an integral part of all `teal` applications and is included on the right side. +Based on the selections made in the filter panel, filter expressions are executed before passing data to `teal` modules. +The technical details of the filter panel are extensively described in [`teal.slice` documentation](https://insightsengineering.github.io/teal.slice/latest-tag/). -By default, `init` initializes the filter panel without any active filters but allows the user to add filters on any column. To start a `teal` application with predefined filters, one must to specify the `filter` argument. In the following example four filters are specified using the `teal_slice` function and wrapped together with `teal_slices`. +By default, `init` initializes the filter panel without any active filters but allows the user to add filters on any column. +To start a `teal` application with predefined filters, one must to specify the `filter` argument. +In the following example four filters are specified using the `teal_slice` function and wrapped together with `teal_slices`. ```r library(teal) app <- init( - data = teal_data( - IRIS = iris, CARS = mtcars, - code = "IRIS <- iris - CARS <- mtcars" - ), + data = teal_data(IRIS = iris, CARS = mtcars), modules = example_module(), filter = teal_slices( teal_slice(dataname = "IRIS", varname = "Sepal.Length"), @@ -41,17 +41,14 @@ if (interactive()) { ### Filter panel respective to `teal_module` -Each `teal_module` (see `?module`) object contains the `datanames` attribute that determines which data sets are to be sent to that module. The filter panel will display only those data sets and hide the rest when this module is active. +Each `teal_module` (see `?module`) object contains the `datanames` attribute that determines which data sets are to be sent to that module. +The filter panel will display only those data sets and hide the rest when this module is active. ```r library(teal) app <- init( - data = teal_data( - IRIS = iris, CARS = mtcars, - code = "IRIS <- iris - CARS <- mtcars" - ), + data = teal_data(IRIS = iris, CARS = mtcars), modules = modules( example_module(label = "all datasets"), example_module(label = "IRIS only", datanames = "IRIS"), @@ -66,7 +63,10 @@ if (interactive()) { ### Global and module specific filter panel -`teal` contains the `teal_slices` function that extends the original `teal_slices` found in `teal.slice` by adding two arguments: `module_specific` and `mapping`. By default `init` initializes app with a "global" filter panel, where all modules use the same filters. Setting `module_specific = TRUE` switches to a "module-specific" filter panel, where each module can have a different set of filters active at any time. It is still possible to set global filters that will be shared among modules. +`teal` contains the `teal_slices` function that extends the original `teal_slices` found in `teal.slice` by adding two arguments: `module_specific` and `mapping`. +By default `init` initializes app with a "global" filter panel, where all modules use the same filters. +Setting `module_specific = TRUE` switches to a "module-specific" filter panel, where each module can have a different set of filters active at any time. +It is still possible to set global filters that will be shared among modules. One possible scenario is depicted in the figure below: @@ -78,7 +78,9 @@ One possible scenario is depicted in the figure below: ![](./images/filters_mapping.jpg) -To achieve the described setup, one must set the `module_specific` argument to `TRUE` and use the `mapping` argument to match filters to modules. `mapping` takes a named list where element names correspond to module labels, and elements are vectors of `teal_slice` `id`s applied to that module at startup. `teal_slice`s listed the element called `"global_filters"` will be applied to all modules. +To achieve the described setup, one must set the `module_specific` argument to `TRUE` and use the `mapping` argument to match filters to modules. +`mapping` takes a named list where element names correspond to module labels, and elements are vectors of `teal_slice` `id`s applied to that module at startup. +`teal_slice`s listed the element called `"global_filters"` will be applied to all modules. ```r library(teal) From 8a7b24f1606b2f8ada45847f77b31aba7eb82ea8 Mon Sep 17 00:00:00 2001 From: Aleksander Chlebowski <114988527+chlebowa@users.noreply.github.com> Date: Thu, 30 Nov 2023 10:07:28 +0100 Subject: [PATCH 08/36] vignette reporting (#979) adapted to `teal_data` class --- vignettes/adding-support-for-reporting.Rmd | 123 +++++++++++---------- 1 file changed, 67 insertions(+), 56 deletions(-) diff --git a/vignettes/adding-support-for-reporting.Rmd b/vignettes/adding-support-for-reporting.Rmd index 70544ea002..8f0b23b2f7 100644 --- a/vignettes/adding-support-for-reporting.Rmd +++ b/vignettes/adding-support-for-reporting.Rmd @@ -12,9 +12,12 @@ vignette: > ## Introduction -The `teal` package offers an integrated reporting feature utilizing the `teal.reporter` package. For a comprehensive explanation of the reporting functionality itself, please refer to the documentation therein. +The `teal` package offers an integrated reporting feature utilizing the `teal.reporter` package. +For a comprehensive explanation of the reporting functionality itself, please refer to the documentation therein. -This article is intended for module developers and aims to provide guidance on enhancing a custom `teal` module with an automatic reporting feature. This enhancement enables users to incorporate snapshots of the module outputs into a report which can then be reviewed in another module automatically provided by `teal`. Thus the app user can interact with the report. +This article is intended for module developers and aims to provide guidance on enhancing a custom `teal` module with an automatic reporting feature. +This enhancement enables users to incorporate snapshots of the module outputs into a report which can then be reviewed in another module automatically provided by `teal`. +Thus the app user can interact with the report. The responsibilities of a module developer include: @@ -23,26 +26,24 @@ The responsibilities of a module developer include: The entire life cycle of objects involved in creating the report and configuring the module to preview the report is handled by `teal`. -## Custom module +## Custom Module -Let us consider the example module from `teal`: +Let us consider an example module, based on the example module from `teal`: ```{r, message=FALSE} library(teal) teal_example_module <- function(label = "example teal module") { - checkmate::assert_string(label) module( label, server = function(id, data) { - checkmate::assert_class(data, "tdata") moduleServer(id, function(input, output, session) { - output$text <- renderPrint(data[[input$dataname]]()) + output$text <- renderPrint(data()[[input$dataname]]) }) }, ui = function(id, data) { ns <- NS(id) teal.widgets::standard_layout( output = verbatimTextOutput(ns("text")), - encoding = selectInput(ns("dataname"), "Choose a dataset", choices = names(data)) + encoding = selectInput(ns("dataname"), "Choose a dataset", choices = datanames(data)) ) }, datanames = "all" @@ -61,28 +62,28 @@ app <- init( if (interactive()) shinyApp(app$ui, app$server) ``` -## Add support for Reporting +## Add Support for Reporting ### Modify the declaration of the server function -The first step is to add an additional argument to the server function declaration - `reporter`. This informs `teal` that the module requires `reporter`, and it will be included when the module is called. See below: +The first step is to add an additional argument to the server function declaration - `reporter`. +This informs `teal` that the module requires `reporter`, and it will be included when the module is called. +See below: ```{r} example_module_with_reporting <- function(label = "example teal module") { - checkmate::assert_string(label) module( label, server = function(id, data, reporter) { - checkmate::assert_class(data, "tdata") moduleServer(id, function(input, output, session) { - output$text <- renderPrint(data[[input$dataname]]()) + output$text <- renderPrint(data()[[input$dataname]]) }) }, ui = function(id, data) { ns <- NS(id) teal.widgets::standard_layout( output = verbatimTextOutput(ns("text")), - encoding = selectInput(ns("dataname"), "Choose a dataset", choices = names(data)) + encoding = selectInput(ns("dataname"), "Choose a dataset", choices = datanames(data)) ) }, datanames = "all" @@ -101,26 +102,26 @@ app <- init( if (interactive()) shinyApp(app$ui, app$server) ``` -`teal` adds another tab to the application, titled `Report previewer`. However, there is no visible change in how the module operates and appears and the user cannot add content to the report from this module. That requires inserting `teal.reporter` `ui` and `server` elements into the module body. +`teal` adds another tab to the application, titled `Report previewer`. +However, there is no visible change in how the module operates and appears and the user cannot add content to the report from this module. +That requires inserting `ui` and `server` elements of the `teal.reporter` module into the module body. -### Insert `UI` and supporting `shiny` modules for adding report cards +### Insert `teal.reporter` module The UI and the server logic necessary for adding cards from `example_module_with_reporting` to the report are provided by `teal.reporter::simple_reporter_ui` and `teal.reporter::simple_reporter_srv`. ```{r} example_module_with_reporting <- function(label = "example teal module") { - checkmate::assert_string(label) module( label, server = function(id, data, reporter) { - checkmate::assert_class(data, "tdata") moduleServer(id, function(input, output, session) { teal.reporter::simple_reporter_srv( id = "reporter", reporter = reporter, card_fun = function(card) card ) - output$text <- renderPrint(data[[input$dataname]]()) + output$text <- renderPrint(data()[[input$dataname]]) }) }, ui = function(id, data) { @@ -130,7 +131,7 @@ example_module_with_reporting <- function(label = "example teal module") { teal.reporter::simple_reporter_ui(ns("reporter")), verbatimTextOutput(ns("text")) ), - encoding = selectInput(ns("dataname"), "Choose a dataset", choices = names(data)) + encoding = selectInput(ns("dataname"), "Choose a dataset", choices = datanames(data)) ) }, datanames = "all" @@ -149,11 +150,16 @@ app <- init( if (interactive()) shinyApp(app$ui, app$server) ``` -A new piece of `UI` has been added, and the buttons are clickable. The user can now add a card to the report and view it in the `Report previewer` module but the preview is still empty since we have not instructed our module what to put on the card. +A new piece of `UI` has been added, and the buttons are clickable. +The user can now add a card to the report and view it in the `Report previewer` module but the preview is still empty since we have not instructed our module what to put on the card. ### Add content to the card -To add content to a card, we will utilize the public API exposed by the `TealReportCard` class. The `teal.reporter::simple_reporter_srv` module accepts the `card_fun` argument that determines the appearance of the output from our custom module. `ReportCard` and its derivatives allow the sequential addition of content according to the order of method calls. To explore the content, we can use the `$get_content` method. For further details, refer to the documentation of `TealReportCard` and `teal.reporter::ReportCard`. +To add content to a card, we will utilize the public API exposed by the `TealReportCard` class. +The `teal.reporter::simple_reporter_srv` module accepts the `card_fun` argument that determines the appearance of the output from our custom module. +`ReportCard` and its derivatives allow the sequential addition of content according to the order of method calls. +To explore the content, we can use the `$get_content` method. +For further details, refer to the documentation of `TealReportCard` and `teal.reporter::ReportCard`. We will add simple text to the card by modifying the `card_fun` argument passed to `teal.reporter::simple_reporter_srv`. The function must return the `card` object, otherwise errors may occur in `teal`. @@ -165,24 +171,26 @@ custom_function <- function(card = teal.reporter::ReportCard$new()) { } example_module_with_reporting <- function(label = "example teal module") { - checkmate::assert_string(label) module( label, server = function(id, data, reporter) { - checkmate::assert_class(data, "tdata") moduleServer(id, function(input, output, session) { - teal.reporter::simple_reporter_srv(id = "simpleReporter", reporter = reporter, card_fun = custom_function) - output$text <- renderPrint(data[[input$dataname]]()) + teal.reporter::simple_reporter_srv( + id = "reporter", + reporter = reporter, + card_fun = custom_function + ) + output$text <- renderPrint(data()[[input$dataname]]) }) }, ui = function(id, data) { ns <- NS(id) teal.widgets::standard_layout( output = tagList( - teal.reporter::simple_reporter_ui(ns("simpleReporter")), + teal.reporter::simple_reporter_ui(ns("reporter")), verbatimTextOutput(ns("text")) ), - encoding = selectInput(ns("dataname"), "Choose a dataset", choices = names(data)) + encoding = selectInput(ns("dataname"), "Choose a dataset", choices = datanames(data)) ) }, datanames = "all" @@ -203,13 +211,15 @@ Now, an application user can see the text added by `custom_function` in the `Rep ### Add non-text content to the card -`teal.reporter` supports the addition of tables, charts, and more. For more information, explore the API of `teal.reporter::ReportCard` to learn about the supported content types. +`teal.reporter` supports the addition of tables, charts, and more. +For more information, explore the API of `teal.reporter::ReportCard` to learn about the supported content types. ### `TealReportCard` -`teal` exports the `TealReportCard` class, which extends the `teal.reporter::ReportCard` class and provides several convenient methods to facilitate working with `teal` features like the filter panel or source code. For more details, refer to the documentation of `TealReportCard`. +`teal` exports the `TealReportCard` class, which extends the `teal.reporter::ReportCard` class and provides several convenient methods to facilitate working with `teal` features like the filter panel or source code. +For more details, refer to the documentation of `TealReportCard`. -To support `TealReportCard`, the function that is passed to `teal.reporter::simple_reporter_srv` must define a default value for the card, as shown below: +To support `TealReportCard`, the function that is passed to `teal.reporter::simple_reporter_srv` must define a default value for the card, as shown below: ```{r} custom_function <- function(card = TealReportCard$new()) { @@ -222,9 +232,13 @@ Without this definition, the API of `TealReportCard` will not be available withi ## Example -In conclusion, we have demonstrated how to build a standard `teal` app with code reproducibility and reporter functionalities. Note that the `server` function requires the `filter_panel_api` argument so that the filter panel state can be added to the report. +In conclusion, we have demonstrated how to build a standard `teal` app with code reproducibility and reporter functionalities. +Note that the `server` function requires the `filter_panel_api` argument so that the filter panel state can be added to the report. -In the final example, we have incorporated `teal.code` snippets. `teal.code` is an R library that offers utilities for storing code and associating it with an execution environment. This allows `ReporterCard` to store the code necessary to generate the table along with the table itself. To learn more about `teal.code` see the vignette _`qenv`_ in `teal.code`. +In the final example, we have incorporated `teal.code` snippets. +`teal.code` is an R library that offers utilities for storing code and associating it with an execution environment. +This allows `ReporterCard` to store the code necessary to generate the table along with the table itself. +To learn more about `teal.code` see the vignette _`qenv`_ in `teal.code`. ```{r} library(teal) @@ -235,32 +249,26 @@ example_reporter_module <- function(label = "Example") { label, server = function(id, data, reporter, filter_panel_api) { with_filter <- !missing(filter_panel_api) && inherits(filter_panel_api, "FilterPanelApi") - checkmate::assert_class(data, "tdata") moduleServer(id, function(input, output, session) { - dat <- reactive(data[[input$dataname]]()) + dat <- reactive(data()[[input$dataname]]) output$nrow_ui <- renderUI({ - sliderInput(session$ns("nrow"), "Number of rows:", 1, nrow(data[[input$dataname]]()), 10) + sliderInput(session$ns("nrow"), "Number of rows:", 1, nrow(dat()), 10) }) table_q <- reactive({ req(input$nrow) - - teal.code::new_qenv(tdata2env(data), code = get_code(data)) %>% - teal.code::eval_code( - substitute( - result <- head(data, nrows), - list( - data = as.name(input$dataname), - nrows = input$nrow - ) - ) - ) + within( + data(), + result <- head(dataset, nrows), + dataset = as.name(input$dataname), + nrows = input$nrow + ) }) output$table <- renderTable(table_q()[["result"]]) ### REPORTER - card_fun <- function(card = ReportCard$new(), comment) { + card_fun <- function(card = teal.reporter::ReportCard$new(), comment) { card$set_name("Table Module") card$append_text(paste("Selected dataset", input$dataname), "header2") card$append_text("Selected Filters", "header3") @@ -270,7 +278,9 @@ example_reporter_module <- function(label = "Example") { card$append_text("Encoding", "header3") card$append_text( yaml::as.yaml( - stats::setNames(lapply(c("dataname", "nrow"), function(x) input[[x]]), c("dataname", "nrow")) + stats::setNames( + lapply(c("dataname", "nrow"), function(x) input[[x]]), c("dataname", "nrow") + ) ), "verbatim" ) @@ -284,7 +294,11 @@ example_reporter_module <- function(label = "Example") { } card } - teal.reporter::add_card_button_srv("addReportCard", reporter = reporter, card_fun = card_fun) + teal.reporter::add_card_button_srv( + "addReportCard", + reporter = reporter, + card_fun = card_fun + ) teal.reporter::download_report_button_srv("downloadButton", reporter = reporter) teal.reporter::reset_report_button_srv("resetButton", reporter) ### @@ -300,7 +314,7 @@ example_reporter_module <- function(label = "Example") { teal.reporter::download_report_button_ui(ns("downloadButton")), teal.reporter::reset_report_button_ui(ns("resetButton")) ), - selectInput(ns("dataname"), "Choose a dataset", choices = names(data)), + selectInput(ns("dataname"), "Choose a dataset", choices = datanames(data)), uiOutput(ns("nrow_ui")) ) ) @@ -312,11 +326,8 @@ example_reporter_module <- function(label = "Example") { app <- init( data = teal_data( AIR = airquality, - IRI = iris, - code = "data(airquality) - AIR <- airquality - data(iris) - IRIS <- iris" + IRIS = iris, + code = expression(AIR <- airquality, IRIS <- iris) ), modules = list( example_reporter_module(label = "with Reporter"), From 6afeae7324ec94d87f94e501837e9c2244157225 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 09:34:54 +0000 Subject: [PATCH 09/36] [skip actions] Restyle files --- vignettes/adding-support-for-reporting.Rmd | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/vignettes/adding-support-for-reporting.Rmd b/vignettes/adding-support-for-reporting.Rmd index 8f0b23b2f7..41569615bf 100644 --- a/vignettes/adding-support-for-reporting.Rmd +++ b/vignettes/adding-support-for-reporting.Rmd @@ -176,8 +176,8 @@ example_module_with_reporting <- function(label = "example teal module") { server = function(id, data, reporter) { moduleServer(id, function(input, output, session) { teal.reporter::simple_reporter_srv( - id = "reporter", - reporter = reporter, + id = "reporter", + reporter = reporter, card_fun = custom_function ) output$text <- renderPrint(data()[[input$dataname]]) @@ -258,9 +258,9 @@ example_reporter_module <- function(label = "Example") { table_q <- reactive({ req(input$nrow) within( - data(), - result <- head(dataset, nrows), - dataset = as.name(input$dataname), + data(), + result <- head(dataset, nrows), + dataset = as.name(input$dataname), nrows = input$nrow ) }) @@ -295,8 +295,8 @@ example_reporter_module <- function(label = "Example") { card } teal.reporter::add_card_button_srv( - "addReportCard", - reporter = reporter, + "addReportCard", + reporter = reporter, card_fun = card_fun ) teal.reporter::download_report_button_srv("downloadButton", reporter = reporter) From 021678d86e69ac2ff6fb7988bc6d4375d1d7b7d9 Mon Sep 17 00:00:00 2001 From: go_gonzo Date: Thu, 30 Nov 2023 10:36:51 +0100 Subject: [PATCH 10/36] fix r cmd check (except vignettes) --- NAMESPACE | 3 +- R/init.R | 35 +++--- R/module_teal_with_splash.R | 40 +------ R/tdata.R | 23 ++-- R/teal.R | 4 +- R/teal_data_module.R | 1 + R/teal_slices.R | 2 +- man/init.Rd | 14 +-- man/reexports.Rd | 4 +- man/srv_teal_with_splash.Rd | 14 +-- man/tdata.Rd | 10 +- man/teal_data_module.Rd | 4 +- man/teal_slices.Rd | 2 +- man/ui_teal_with_splash.Rd | 14 +-- tests/testthat/test-init.R | 106 +----------------- tests/testthat/test-module_teal_with_splash.R | 35 ------ tests/testthat/test-modules.R | 7 -- tests/testthat/test-tdata.R | 8 +- 18 files changed, 67 insertions(+), 259 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 26c72ba180..11e4b56254 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -19,7 +19,6 @@ export(TealReportCard) export(as.teal_slices) export(as_tdata) export(example_module) -export(get_code.tdata) export(get_code_tdata) export(get_metadata) export(init) @@ -47,6 +46,6 @@ import(shiny) import(teal.data) import(teal.slice) import(teal.transform) -importFrom(lifecycle,deprecate_soft) +importFrom(lifecycle,badge) importFrom(magrittr,"%>%") importFrom(stats,setNames) diff --git a/R/init.R b/R/init.R index 41d501948b..80ca7eb912 100644 --- a/R/init.R +++ b/R/init.R @@ -10,16 +10,10 @@ #' End-users: This is the most important function for you to start a #' teal app that is composed out of teal modules. #' -#' @param data (`TealData` or `TealDataset` or `TealDatasetConnector` or `list` or `data.frame` -#' or `MultiAssayExperiment`, `teal_data`, `teal_data_module`)\cr -#' `R6` object as returned by [teal.data::cdisc_data()], [teal.data::teal_data()], -#' [teal.data::cdisc_dataset()], [teal.data::dataset()], [teal.data::dataset_connector()] or -#' [teal.data::cdisc_dataset_connector()] or [teal_data_module()] or a single `data.frame` or -#' a `MultiAssayExperiment` -#' or a list of the previous objects or function returning a named list. -#' NOTE: teal does not guarantee reproducibility of the code when names of the list elements -#' do not match the original object names. To ensure reproducibility please use [teal.data::teal_data()] -#' or [teal.data::cdisc_data()] with `check = TRUE` enabled. +#' @param data (`teal_data`, `teal_data_module`, `named list`)\cr +#' `teal_data` object as returned by [teal.data::teal_data()] or +#' `teal_data_modules` or simply a list of a named list of objects +#' (`data.frame` or `MultiAssayExperiment`). #' @param modules (`list`, `teal_modules` or `teal_module`)\cr #' nested list of `teal_modules` or `teal_module` objects or a single #' `teal_modules` or `teal_module` object. These are the specific output modules which @@ -108,11 +102,22 @@ init <- function(data, footer = tags$p(), id = character(0)) { logger::log_trace("init initializing teal app with: data ({ class(data)[1] }).") - if (!inherits(data, c("TealData", "teal_data", "teal_data_module"))) { - data <- teal.data::to_relational_data(data = data) + if (is.list(data)) { + checkmate::assert_list(data, names = "named") + data <- do.call(teal.data::teal_data, data) + } + if (inherits(data, "TealData")) { + lifecycle::deprecate_stop( + when = "0.99.0", + what = "init(data)", + paste( + "TealData is no longer supported. Use teal_data() instead.", + "Please follow migration instructions https://github.com/insightsengineering/teal/discussions/988." + ) + ) } - checkmate::assert_multi_class(data, c("TealData", "teal_data", "teal_data_module")) + checkmate::assert_multi_class(data, c("teal_data", "teal_data_module")) checkmate::assert_multi_class(modules, c("teal_module", "list", "teal_modules")) checkmate::assert_string(title, null.ok = TRUE) checkmate::assert( @@ -215,10 +220,6 @@ init <- function(data, landing_module <- landing[[1L]] do.call(landing_module$server, c(list(id = "landing_module_shiny_id"), landing_module$server_args)) } - if (inherits(data, "TealDataAbstract")) { - # copy TealData so that load won't be shared between the session - data <- data$copy(deep = TRUE) - } filter <- deep_copy_filter(filter) srv_teal_with_splash(id = id, data = data, modules = modules, filter = filter) } diff --git a/R/module_teal_with_splash.R b/R/module_teal_with_splash.R index b3a9740e85..a15e69d507 100644 --- a/R/module_teal_with_splash.R +++ b/R/module_teal_with_splash.R @@ -22,7 +22,7 @@ ui_teal_with_splash <- function(id, title, header = tags$p("Add Title Here"), footer = tags$p("Add Footer Here")) { - checkmate::assert_multi_class(data, c("TealData", "teal_data", "teal_data_module")) + checkmate::assert_multi_class(data, c("teal_data", "teal_data_module")) ns <- NS(id) # Startup splash screen for delayed loading @@ -33,11 +33,6 @@ ui_teal_with_splash <- function(id, data$ui(ns("teal_data_module")) } else if (inherits(data, "teal_data")) { div() - } else if (inherits(data, "TealDataAbstract") && teal.data::is_pulled(data)) { - div() - } else { - message("App was initialized with delayed data loading.") - data$get_ui(ns("startapp_module")) } ui_teal( id = ns("teal"), @@ -63,7 +58,7 @@ ui_teal_with_splash <- function(id, #' If data is not loaded yet, `reactive` returns `NULL`. #' @export srv_teal_with_splash <- function(id, data, modules, filter = teal_slices()) { - checkmate::check_multi_class(data, c("TealData", "teal_data", "teal_data_module")) + checkmate::check_multi_class(data, c("teal_data", "teal_data_module")) moduleServer(id, function(input, output, session) { logger::log_trace("srv_teal_with_splash initializing module with data.") @@ -82,41 +77,13 @@ srv_teal_with_splash <- function(id, data, modules, filter = teal_slices()) { data } else if (inherits(data, "teal_data")) { reactiveVal(data) - } else if (inherits(data, "TealDataAbstract") && teal.data::is_pulled(data)) { - new_data <- do.call( - teal.data::teal_data, - c( - lapply(data$get_datasets(), function(x) x$get_raw_data()), - list(code = data$get_code()), - list(join_keys = teal.data::join_keys(data)) - ) - ) - reactiveVal(new_data) # will trigger by setting it - } else { - raw_data_old <- data$get_server()(id = "startapp_module") - raw_data <- reactive({ - data <- raw_data_old() - if (!is.null(data)) { - # raw_data is a reactive which returns data only when submit button clicked - # otherwise it returns NULL - do.call( - teal.data::teal_data, - c( - lapply(data$get_datasets(), function(x) x$get_raw_data()), - list(code = data$get_code()), - list(join_keys = teal.data::join_keys(data)) - ) - ) - } - }) - raw_data } teal_data_rv_validate <- reactive({ # custom module can return error data <- tryCatch(teal_data_rv(), error = function(e) e) - # there is an empty reactive event on init! + # there is an empty reactive cycle on init! if (inherits(data, "shiny.silent.error") && identical(data$message, "")) { return(NULL) } @@ -184,7 +151,6 @@ srv_teal_with_splash <- function(id, data, modules, filter = teal_slices()) { }) - res <- srv_teal(id = "teal", modules = modules, teal_data_rv = teal_data_rv_validate, filter = filter) logger::log_trace("srv_teal_with_splash initialized module with data.") return(res) diff --git a/R/tdata.R b/R/tdata.R index 013df0b68f..391df963c6 100644 --- a/R/tdata.R +++ b/R/tdata.R @@ -1,5 +1,6 @@ #' Create a `tdata` Object #' +#' @description `r lifecycle::badge("deprecated")` #' Create a new object called `tdata` which contains `data`, a `reactive` list of data.frames #' (or `MultiAssayExperiment`), with attributes: #' \itemize{ @@ -37,13 +38,21 @@ #' isolate(data[["iris"]]()) #' #' # Get code -#' isolate(get_code(data)) +#' isolate(get_code_tdata(data)) #' #' # Get metadata #' get_metadata(data, "iris") #' #' @export new_tdata <- function(data, code = "", join_keys = NULL, metadata = NULL) { + lifecycle::deprecate_soft( + when = "0.99.0", + what = "tdata()", + details = paste( + "tdata is deprecated and will be removed in the next release. Use `teal_data` instead.\n", + "Please follow migration instructions https://github.com/insightsengineering/teal/discussions/987." + ) + ) checkmate::assert_list( data, any.missing = FALSE, names = "unique", @@ -54,7 +63,6 @@ new_tdata <- function(data, code = "", join_keys = NULL, metadata = NULL) { checkmate::assert_list(metadata, names = "unique", null.ok = TRUE) checkmate::assert_subset(names(metadata), names(data)) - for (m in metadata) teal.data::validate_metadata(m) if (is.reactive(code)) { isolate(checkmate::assert_class(code(), "character", .var.name = "code")) @@ -104,15 +112,6 @@ tdata2env <- function(data) { # nolint list2env(lapply(data, function(x) if (is.reactive(x)) x() else x)) } -#' @rdname tdata -#' @param x a `tdata` object -#' @param ... additional arguments for the generic -#' @export -get_code.tdata <- function(x, ...) { # nolint - # note teal.data which teal depends on defines the get_code method - attr(x, "code")() -} - #' Wrapper for `get_code.tdata` #' This wrapper is to be used by downstream packages to extract the code of a `tdata` object @@ -123,7 +122,7 @@ get_code.tdata <- function(x, ...) { # nolint #' @export get_code_tdata <- function(data) { checkmate::assert_class(data, "tdata") - get_code(data) + attr(data, "code")() } #' Extract `join_keys` from `tdata` diff --git a/R/teal.R b/R/teal.R index 05de50ebbb..6ec6e6cee4 100644 --- a/R/teal.R +++ b/R/teal.R @@ -19,5 +19,5 @@ magrittr::`%>%` NULL # Fix R CMD check notes -#' @importFrom lifecycle deprecate_soft -lifecycle::deprecate_soft +#' @importFrom lifecycle badge +lifecycle::badge diff --git a/R/teal_data_module.R b/R/teal_data_module.R index 465e240eb2..75a5557e56 100644 --- a/R/teal_data_module.R +++ b/R/teal_data_module.R @@ -1,5 +1,6 @@ #' Data module for `teal` applications #' +#' @description `r lifecycle::badge("experimental")` #' Creates `teal_data_module` object - a `shiny` module to supply or modify data in a `teal` application. #' #' This function creates a `shiny` module that allows for running data pre-processing code after the app starts. diff --git a/R/teal_slices.R b/R/teal_slices.R index 7beae7023d..077d94d8c8 100644 --- a/R/teal_slices.R +++ b/R/teal_slices.R @@ -51,11 +51,11 @@ #' ) #' #' app <- teal::init( +#' data = list(iris = iris, mtcars = mtcars), #' modules = list( #' module("module1"), #' module("module2") #' ), -#' data = list(iris, mtcars), #' filter = filter #' ) #' diff --git a/man/init.Rd b/man/init.Rd index d5ad532ec7..308af0d5dc 100644 --- a/man/init.Rd +++ b/man/init.Rd @@ -15,16 +15,10 @@ init( ) } \arguments{ -\item{data}{(\code{TealData} or \code{TealDataset} or \code{TealDatasetConnector} or \code{list} or \code{data.frame} -or \code{MultiAssayExperiment}, \code{teal_data}, \code{teal_data_module})\cr -\code{R6} object as returned by \code{\link[teal.data:cdisc_data]{teal.data::cdisc_data()}}, \code{\link[teal.data:teal_data]{teal.data::teal_data()}}, -\code{\link[teal.data:TealData]{teal.data::cdisc_dataset()}}, \code{\link[teal.data:TealData]{teal.data::dataset()}}, \code{\link[teal.data:TealData]{teal.data::dataset_connector()}} or -\code{\link[teal.data:TealData]{teal.data::cdisc_dataset_connector()}} or \code{\link[=teal_data_module]{teal_data_module()}} or a single \code{data.frame} or -a \code{MultiAssayExperiment} -or a list of the previous objects or function returning a named list. -NOTE: teal does not guarantee reproducibility of the code when names of the list elements -do not match the original object names. To ensure reproducibility please use \code{\link[teal.data:teal_data]{teal.data::teal_data()}} -or \code{\link[teal.data:cdisc_data]{teal.data::cdisc_data()}} with \code{check = TRUE} enabled.} +\item{data}{(\code{teal_data}, \code{teal_data_module}, \verb{named list})\cr +\code{teal_data} object as returned by \code{\link[teal.data:teal_data]{teal.data::teal_data()}} or +\code{teal_data_modules} or simply a list of a named list of objects +(\code{data.frame} or \code{MultiAssayExperiment}).} \item{modules}{(\code{list}, \code{teal_modules} or \code{teal_module})\cr nested list of \code{teal_modules} or \code{teal_module} objects or a single diff --git a/man/reexports.Rd b/man/reexports.Rd index 71c397008b..cebb6d4583 100644 --- a/man/reexports.Rd +++ b/man/reexports.Rd @@ -4,7 +4,7 @@ \name{reexports} \alias{reexports} \alias{\%>\%} -\alias{deprecate_soft} +\alias{badge} \title{Objects exported from other packages} \keyword{internal} \description{ @@ -12,7 +12,7 @@ These objects are imported from other packages. Follow the links below to see their documentation. \describe{ - \item{lifecycle}{\code{\link[lifecycle]{deprecate_soft}}} + \item{lifecycle}{\code{\link[lifecycle]{badge}}} \item{magrittr}{\code{\link[magrittr:pipe]{\%>\%}}} }} diff --git a/man/srv_teal_with_splash.Rd b/man/srv_teal_with_splash.Rd index 9f2a11ec85..decc5b42ee 100644 --- a/man/srv_teal_with_splash.Rd +++ b/man/srv_teal_with_splash.Rd @@ -14,16 +14,10 @@ the server function must be called with \code{\link[shiny:moduleServer]{shiny::m See the vignette for an example. However, \code{\link[=ui_teal_with_splash]{ui_teal_with_splash()}} is then preferred to this function.} -\item{data}{(\code{TealData} or \code{TealDataset} or \code{TealDatasetConnector} or \code{list} or \code{data.frame} -or \code{MultiAssayExperiment}, \code{teal_data}, \code{teal_data_module})\cr -\code{R6} object as returned by \code{\link[teal.data:cdisc_data]{teal.data::cdisc_data()}}, \code{\link[teal.data:teal_data]{teal.data::teal_data()}}, -\code{\link[teal.data:TealData]{teal.data::cdisc_dataset()}}, \code{\link[teal.data:TealData]{teal.data::dataset()}}, \code{\link[teal.data:TealData]{teal.data::dataset_connector()}} or -\code{\link[teal.data:TealData]{teal.data::cdisc_dataset_connector()}} or \code{\link[=teal_data_module]{teal_data_module()}} or a single \code{data.frame} or -a \code{MultiAssayExperiment} -or a list of the previous objects or function returning a named list. -NOTE: teal does not guarantee reproducibility of the code when names of the list elements -do not match the original object names. To ensure reproducibility please use \code{\link[teal.data:teal_data]{teal.data::teal_data()}} -or \code{\link[teal.data:cdisc_data]{teal.data::cdisc_data()}} with \code{check = TRUE} enabled.} +\item{data}{(\code{teal_data}, \code{teal_data_module}, \verb{named list})\cr +\code{teal_data} object as returned by \code{\link[teal.data:teal_data]{teal.data::teal_data()}} or +\code{teal_data_modules} or simply a list of a named list of objects +(\code{data.frame} or \code{MultiAssayExperiment}).} \item{modules}{\code{teal_modules} object containing the output modules which will be displayed in the teal application. See \code{\link[=modules]{modules()}} and \code{\link[=module]{module()}} for diff --git a/man/tdata.Rd b/man/tdata.Rd index c85940e057..77da52688a 100644 --- a/man/tdata.Rd +++ b/man/tdata.Rd @@ -3,12 +3,9 @@ \name{tdata} \alias{tdata} \alias{new_tdata} -\alias{get_code.tdata} \title{Create a \code{tdata} Object} \usage{ new_tdata(data, code = "", join_keys = NULL, metadata = NULL) - -get_code.tdata(x, ...) } \arguments{ \item{data}{A \verb{named list} of \code{data.frames} (or \code{MultiAssayExperiment}) @@ -25,15 +22,12 @@ datasets.} \item{metadata}{A \verb{named list} each element contains a list of metadata about the named data.frame Each element of these list should be atomic and length one.} - -\item{x}{a \code{tdata} object} - -\item{...}{additional arguments for the generic} } \value{ A \code{tdata} object } \description{ +\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Create a new object called \code{tdata} which contains \code{data}, a \code{reactive} list of data.frames (or \code{MultiAssayExperiment}), with attributes: \itemize{ @@ -56,7 +50,7 @@ data <- new_tdata( isolate(data[["iris"]]()) # Get code -isolate(get_code(data)) +isolate(get_code_tdata(data)) # Get metadata get_metadata(data, "iris") diff --git a/man/teal_data_module.Rd b/man/teal_data_module.Rd index 6bf39fb807..ba5aec55da 100644 --- a/man/teal_data_module.Rd +++ b/man/teal_data_module.Rd @@ -18,9 +18,9 @@ must return reactive expression containing \code{teal_data} object} Object of class \code{teal_data_module}. } \description{ +\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#experimental}{\figure{lifecycle-experimental.svg}{options: alt='[Experimental]'}}}{\strong{[Experimental]}} Creates \code{teal_data_module} object - a \code{shiny} module to supply or modify data in a \code{teal} application. -} -\details{ + This function creates a \code{shiny} module that allows for running data pre-processing code after the app starts. The body of the server function will be run in the app rather than in the global environment. This means it will be run every time the app starts, so use sparingly. diff --git a/man/teal_slices.Rd b/man/teal_slices.Rd index 7894d29c2b..486b969ce2 100644 --- a/man/teal_slices.Rd +++ b/man/teal_slices.Rd @@ -94,11 +94,11 @@ filter <- teal_slices( ) app <- teal::init( + data = list(iris = iris, mtcars = mtcars), modules = list( module("module1"), module("module2") ), - data = list(iris, mtcars), filter = filter ) diff --git a/man/ui_teal_with_splash.Rd b/man/ui_teal_with_splash.Rd index 0fe8a246a7..35fcf371fd 100644 --- a/man/ui_teal_with_splash.Rd +++ b/man/ui_teal_with_splash.Rd @@ -16,16 +16,10 @@ ui_teal_with_splash( \item{id}{(\code{character(1)})\cr module id} -\item{data}{(\code{TealData} or \code{TealDataset} or \code{TealDatasetConnector} or \code{list} or \code{data.frame} -or \code{MultiAssayExperiment}, \code{teal_data}, \code{teal_data_module})\cr -\code{R6} object as returned by \code{\link[teal.data:cdisc_data]{teal.data::cdisc_data()}}, \code{\link[teal.data:teal_data]{teal.data::teal_data()}}, -\code{\link[teal.data:TealData]{teal.data::cdisc_dataset()}}, \code{\link[teal.data:TealData]{teal.data::dataset()}}, \code{\link[teal.data:TealData]{teal.data::dataset_connector()}} or -\code{\link[teal.data:TealData]{teal.data::cdisc_dataset_connector()}} or \code{\link[=teal_data_module]{teal_data_module()}} or a single \code{data.frame} or -a \code{MultiAssayExperiment} -or a list of the previous objects or function returning a named list. -NOTE: teal does not guarantee reproducibility of the code when names of the list elements -do not match the original object names. To ensure reproducibility please use \code{\link[teal.data:teal_data]{teal.data::teal_data()}} -or \code{\link[teal.data:cdisc_data]{teal.data::cdisc_data()}} with \code{check = TRUE} enabled.} +\item{data}{(\code{teal_data}, \code{teal_data_module}, \verb{named list})\cr +\code{teal_data} object as returned by \code{\link[teal.data:teal_data]{teal.data::teal_data()}} or +\code{teal_data_modules} or simply a list of a named list of objects +(\code{data.frame} or \code{MultiAssayExperiment}).} \item{title}{(\code{NULL} or \code{character})\cr The browser window title (defaults to the host URL of the page).} diff --git a/tests/testthat/test-init.R b/tests/testthat/test-init.R index b19df7aad7..53bd16aada 100644 --- a/tests/testthat/test-init.R +++ b/tests/testthat/test-init.R @@ -1,19 +1,3 @@ -testthat::test_that("init data accepts TealData object", { - lifecycle::expect_deprecated( - init( - data = teal.data::cdisc_data( - teal.data::cdisc_dataset( - "ADSL", - as.data.frame(as.list(setNames(nm = teal.data::get_cdisc_keys("ADSL")))), - parent = character(0), - keys = teal.data::get_cdisc_keys("ADSL") - ) - ), - modules = teal:::example_modules(datanames = "ADSL") - ) - ) -}) - testthat::test_that("init data accepts teal_data object", { testthat::expect_no_error( init( @@ -23,39 +7,6 @@ testthat::test_that("init data accepts teal_data object", { ) }) -testthat::test_that("init data throws an error with input other than TealData, teal_data and list(ui, server)", { - character_vector <- c("a", "b", "c") - numeric_vector <- c(1, 2, 3) - matrix_d <- as.matrix(c(1, 2, 3)) - teal_data_list <- list(teal.data::teal_data(teal.data::dataset("iris", iris))) - testthat::expect_error(init(data = character_vector, modules = modules(example_module()))) - testthat::expect_error(init(data = numeric_vector, modules = modules(example_module()))) - testthat::expect_error(init(data = numeric_vector, modules = modules(example_module()))) - testthat::expect_error(init(data = matrix_d, modules = modules(example_module()))) - testthat::expect_error(init(data = teal_data_list, modules = modules(example_module()))) -}) - -testthat::test_that("init data accepts a single TealDataset", { - testthat::expect_no_error( - init( - data = teal.data::dataset("ADSL", head(iris)), - modules = teal:::example_modules(datanames = "ADSL") - ) - ) -}) - -testthat::test_that("init data accepts a list of single TealDataset without renaming", { - testthat::expect_no_error( - init( - data = list( - teal.data::dataset("ADSL", head(iris)), - teal.data::dataset("ADTTE", head(iris)) - ), - modules = teal:::example_modules() - ) - ) -}) - testthat::test_that("init data accepts a single dataframe", { testthat::expect_no_error( init(data = list(iris = iris), modules = modules(example_module())) @@ -63,6 +14,7 @@ testthat::test_that("init data accepts a single dataframe", { }) testthat::test_that("init data accepts a list of single dataframe without renaming", { + testthat::skip("todo: should we support data as unnamed list in teal?") testthat::expect_no_error( init(data = list(iris, mtcars), modules = modules(example_module())) ) @@ -77,15 +29,6 @@ testthat::test_that("init data accepts a list of single dataframe with renaming" ) }) -testthat::test_that("init data accepts a list of a TealDataset and a dataframe without renaming", { - testthat::expect_no_error( - init( - data = list(teal.data::dataset("ADSL", head(iris)), iris), - modules = modules(example_module()) - ) - ) -}) - testthat::test_that("init data accepts a single MultiAssayExperiment object", { utils::data(miniACC, package = "MultiAssayExperiment") testthat::expect_no_error( @@ -93,11 +36,6 @@ testthat::test_that("init data accepts a single MultiAssayExperiment object", { ) }) -testthat::test_that("init data accepts a list of a single MultiAssayExperiment object without renaming", { - utils::data(miniACC, package = "MultiAssayExperiment") - testthat::expect_no_error(init(data = list(miniACC), modules = modules(example_module()))) -}) - testthat::test_that("init data accepts a list of a single MultiAssayExperiment object with renaming", { utils::data(miniACC, package = "MultiAssayExperiment") testthat::expect_no_error(init(data = list(x = miniACC), modules = modules(example_module()))) @@ -108,38 +46,6 @@ testthat::test_that("init data acceptsa mixed list of MultiAssayExperiment objec testthat::expect_no_error(init(data = list(x = miniACC, y = head(iris)), modules = modules(example_module()))) }) -testthat::test_that("init data accepts a list of a TealDataset and a dataframe with renaming", { - testthat::expect_no_error(init( - data = list( - data1 = teal.data::dataset("iris", head(iris)), - data2 = as.data.frame(as.list(setNames(nm = teal.data::get_cdisc_keys("ADSL")))) - ), - modules = modules(example_module()) - )) -}) - -testthat::test_that("init data accepts a list of mixed TealDataset and dataframe with mixed renaming", { - testthat::expect_no_error( - init( - data = list( - data1 = teal.data::dataset("iris", head(iris)), - iris2 = iris - ), - modules = modules(example_module()) - ) - ) -}) - -testthat::test_that("init data accepts TealDatasetConnector object", { - dsc1 <- teal.data::dataset_connector("iris", teal.data::callable_function(function() head(iris))) - testthat::expect_no_error(init(data = dsc1, modules = modules(example_module()))) -}) - -testthat::test_that("init data accepts a list of TealDatasetConnector object", { - dsc1 <- list(teal.data::dataset_connector("iris", teal.data::callable_function(function() head(iris)))) - testthat::expect_no_error(init(data = dsc1, modules = modules(example_module()))) -}) - testthat::test_that("init data accepts teal_data_module", { testthat::expect_no_error( init( @@ -151,26 +57,26 @@ testthat::test_that("init data accepts teal_data_module", { testthat::test_that("init modules accepts a teal_modules object", { mods <- modules(example_module(), example_module()) - testthat::expect_no_error(init(data = iris, modules = mods)) + testthat::expect_no_error(init(data = list(iris = iris), modules = mods)) }) testthat::test_that("init modules accepts a list of teal_module elements", { mods <- list(example_module(), example_module()) - testthat::expect_no_error(init(data = iris, modules = mods)) + testthat::expect_no_error(init(data = list(iris = iris), modules = mods)) }) testthat::test_that("init modules accepts a teal_module object", { mods <- example_module() - testthat::expect_no_error(init(data = iris, modules = mods)) + testthat::expect_no_error(init(data = list(iris = iris), modules = mods)) }) testthat::test_that("init filter accepts `teal_slices`", { fs <- teal.slice::teal_slices( teal.slice::teal_slice(dataname = "iris", varname = "species", selected = "setosa") ) - testthat::expect_no_error(init(data = list(iris), modules = modules(example_module()), filter = fs)) + testthat::expect_no_error(init(data = list(iris = iris), modules = modules(example_module()), filter = fs)) testthat::expect_error( - init(data = list(iris), modules = modules(example_module()), filter = unclass(fs)), + init(data = list(iris = iris), modules = modules(example_module()), filter = unclass(fs)), "Assertion failed" ) }) diff --git a/tests/testthat/test-module_teal_with_splash.R b/tests/testthat/test-module_teal_with_splash.R index a68f047f02..2ccc270e13 100644 --- a/tests/testthat/test-module_teal_with_splash.R +++ b/tests/testthat/test-module_teal_with_splash.R @@ -128,41 +128,6 @@ testthat::test_that( } ) - -testthat::test_that("srv_teal_with_splash creates raw_data based on DDL returns NULL before loading", { - x <- dataset_connector(dataname = "test_dataset", pull_callable = callable_code("iris")) - delayed_data <- teal_data(x) - shiny::testServer( - app = srv_teal_with_splash, - args = list( - id = "test", - data = delayed_data, - modules = modules(example_module()) - ), - expr = testthat::expect_null(raw_data()) - ) -}) - -testthat::test_that("srv_teal_with_splash creates raw_data based on DDL returns pulled data when loaded", { - teal.logger::suppress_logs() - x <- dataset_connector(dataname = "iris", pull_callable = callable_code("iris")) - delayed_data <- teal_data(x) - shiny::testServer( - app = srv_teal_with_splash, - args = list( - id = "test", - data = delayed_data, - modules = modules(example_module()) - ), - expr = { - testthat::expect_null(raw_data()) - session$setInputs(`startapp_module-submit` = TRUE) # DDL has independent session id (without ns) - testthat::expect_is(raw_data(), "teal_data") - testthat::expect_identical(raw_data()[["iris"]], iris) - } - ) -}) - testthat::test_that("srv_teal_with_splash teal_data_rv_validate throws when incompatible module's datanames", { shiny::testServer( app = srv_teal_with_splash, diff --git a/tests/testthat/test-modules.R b/tests/testthat/test-modules.R index dc2fd11c49..4c936ae715 100644 --- a/tests/testthat/test-modules.R +++ b/tests/testthat/test-modules.R @@ -1,10 +1,3 @@ -dataset_1 <- teal.data::dataset("iris", head(iris)) -adsl_df <- as.data.frame(as.list(setNames(nm = teal.data::get_cdisc_keys("ADSL")))) -adsl_dataset <- teal.data::cdisc_dataset( - "ADSL", adsl_df, - parent = character(0), keys = teal.data::get_cdisc_keys("ADSL") -) - call_module_server_fun <- function(input, output, session, data, datasets) { } diff --git a/tests/testthat/test-tdata.R b/tests/testthat/test-tdata.R index dd48dbdd3d..4ed51fa4f0 100644 --- a/tests/testthat/test-tdata.R +++ b/tests/testthat/test-tdata.R @@ -1,3 +1,5 @@ +withr::local_options(lifecycle_verbosity = "quiet") + # ---- constructor ---- testthat::test_that("new_tdata accepts reactive and not reactive MAE and data.frames", { utils::data(miniACC, package = "MultiAssayExperiment") @@ -138,7 +140,7 @@ testthat::test_that("get_metadata returns NULL if dataset doesn't exist", { # ---- get_code ---- testthat::test_that("get_code returns empty character if tdata object has no code", { my_tdata <- new_tdata(data = list(iris = iris, mtcars = mtcars)) - testthat::expect_equal("", isolate(get_code(my_tdata))) + testthat::expect_equal("", isolate(get_code_tdata(my_tdata))) }) testthat::test_that("get_code returns character of code if tdata object has code", { @@ -149,14 +151,14 @@ testthat::test_that("get_code returns character of code if tdata object has code data = list(x = iris, mtcars = head(mtcars)), code = reactive(code_string) ) - testthat::expect_equal(isolate(get_code(my_tdata)), code_string) + testthat::expect_equal(isolate(get_code_tdata(my_tdata)), code_string) # not reactive case (for constructor) my_tdata <- new_tdata( data = list(x = iris, mtcars = head(mtcars)), code = code_string ) - testthat::expect_equal(isolate(get_code(my_tdata)), code_string) + testthat::expect_equal(isolate(get_code_tdata(my_tdata)), code_string) }) # ---- get_code wrapper ---- From 28e197243f418a57d268c7fe4fbdddc355ff56cd Mon Sep 17 00:00:00 2001 From: Aleksander Chlebowski <114988527+chlebowa@users.noreply.github.com> Date: Thu, 30 Nov 2023 10:51:28 +0100 Subject: [PATCH 11/36] update example module (#991) Modified `example_module` to remove `data` argument from UI function. Data set selection is moved to a `renderUI` element on the server side. --- R/dummy_functions.R | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/R/dummy_functions.R b/R/dummy_functions.R index 5cbd894117..f8a6c99e70 100644 --- a/R/dummy_functions.R +++ b/R/dummy_functions.R @@ -95,7 +95,12 @@ example_module <- function(label = "example teal module", datanames = "all") { server = function(id, data) { checkmate::assert_class(data(), "teal_data") moduleServer(id, function(input, output, session) { - output$text <- renderPrint(data()[[input$dataname]]) + ns <- session$ns + updateSelectInput(session, "dataname", choices = isolate(teal.data::datanames(data()))) + output$text <- renderPrint({ + req(input$dataname) + data()[[input$dataname]] + }) teal.widgets::verbatim_popup_srv( id = "rcode", verbatim_content = reactive(teal.code::get_code(data())), @@ -103,12 +108,12 @@ example_module <- function(label = "example teal module", datanames = "all") { ) }) }, - ui = function(id, data) { + ui = function(id) { ns <- NS(id) teal.widgets::standard_layout( output = verbatimTextOutput(ns("text")), encoding = div( - selectInput(ns("dataname"), "Choose a dataset", choices = teal.data::datanames(data)), + selectInput(ns("dataname"), "Choose a dataset", choices = NULL), teal.widgets::verbatim_popup_ui(ns("rcode"), "Show R code") ) ) From b617482b00c3efe069ee5e26addd9f5f80e5d325 Mon Sep 17 00:00:00 2001 From: go_gonzo Date: Thu, 30 Nov 2023 11:50:08 +0100 Subject: [PATCH 12/36] deprecations - hard deprecated data in the ui - soft deprecated datasets in the server --- NEWS.md | 6 +++++ R/module_nested_tabs.R | 16 ------------- R/modules.R | 23 ++++++++++++++---- man/module.Rd | 2 -- tests/testthat/test-module_nested_tabs.R | 30 +++++------------------- tests/testthat/test-modules.R | 25 +++++++++++++------- 6 files changed, 47 insertions(+), 55 deletions(-) diff --git a/NEWS.md b/NEWS.md index 2af3cd057e..f47c5bde49 100644 --- a/NEWS.md +++ b/NEWS.md @@ -7,6 +7,12 @@ * Filter state snapshots can now be uploaded from file. See `?snapshot`. * Added `as_tdata` function to facilitate migration of modules to the new `teal_data` class. +### Breaking changes + +* `tdata` has been deprecated and replaced with `teal_data`. Support for `tdata` as `data` argument in the `module(server)` will be removed in the next release. +* `module(ui)` argument no longer accepts `data` and `datasets` arguments. Data dependent logic should be set in the `server` function. +* `module(server)` argument deprecated a `datasets` argument. `teal_module`'s `server` should accept `data` (`teal_data`) instead. + ### Miscellaneous * Enhanced a `module` validation checks so that it won't throw messages about `data` argument unnecessarily. diff --git a/R/module_nested_tabs.R b/R/module_nested_tabs.R index 608ac6dbb6..471f25830b 100644 --- a/R/module_nested_tabs.R +++ b/R/module_nested_tabs.R @@ -115,15 +115,6 @@ ui_nested_tabs.teal_module <- function(id, modules, datasets, depth = 0L, is_mod args <- isolate(teal.transform::resolve_delayed(modules$ui_args, datasets)) args <- c(list(id = ns("module")), args) - if (is_arg_used(modules$ui, "datasets")) { - args <- c(args, datasets = datasets) - } - - if (is_arg_used(modules$ui, "data")) { - data <- .datasets_to_data(modules, datasets) - args <- c(args, data = list(data)) - } - teal_ui <- tags$div( id = id, class = "teal_module", @@ -252,13 +243,6 @@ srv_nested_tabs.teal_module <- function(id, datasets, modules, is_module_specifi args <- c(args, filter_panel_api = filter_panel_api) } - if (is_arg_used(modules$server, "datasets") && is_arg_used(modules$server, "data")) { - warning( - "Module '", modules$label, "' has `data` and `datasets` arguments in the formals.", - "\nIt's recommended to use `data` to work with filtered objects." - ) - } - # observe the trigger_module above to induce the module once the renderUI is triggered observeEvent( ignoreNULL = TRUE, diff --git a/R/modules.R b/R/modules.R index 97644280ba..abc1141ab4 100644 --- a/R/modules.R +++ b/R/modules.R @@ -179,8 +179,6 @@ is_arg_used <- function(modules, arg) { #' - `...` (optional) `server_args` elements will be passed to the module named argument or to the `...`. #' @param ui (`function`) Shiny `ui` module function with following arguments: #' - `id` - teal will set proper shiny namespace for this module. -#' - `data` (optional) module will receive list of reactive (filtered) data specified in the `filters` argument. -#' - `datasets` (optional) module will receive `FilteredData`. (See `[teal.slice::FilteredData]`). #' - `...` (optional) `ui_args` elements will be passed to the module named argument or to the `...`. #' @param filters (`character`) Deprecated. Use `datanames` instead. #' @param datanames (`character`) A vector with `datanames` that are relevant for the item. The @@ -284,6 +282,14 @@ module <- function(label = "module", message(sprintf("module \"%s\" server function takes no data so \"datanames\" will be ignored", label)) datanames <- NULL } + if ("datasets" %in% server_formals) { + warning( + sprintf("Called from module(label = \"%s\", ...)\n ", label), + "`datasets` argument in the `server` is deprecated and will be removed in the next release. ", + "Please use `data` instead.", + call. = FALSE + ) + } srv_extra_args <- setdiff(names(server_args), server_formals) if (length(srv_extra_args) > 0 && !"..." %in% server_formals) { @@ -299,13 +305,20 @@ module <- function(label = "module", stop( "\nmodule() `ui` argument requires a function with following arguments:", "\n - id - teal will set proper shiny namespace for this module.", - "\n\nFollowing arguments can be used optionaly:", - "\n - `data` - module will receive list of reactive (filtered) data specied in the `filters` argument", - "\n - `datasets` - module will receive `FilteredData`. See `help(teal.slice::FilteredData)`", + "\n\nFollowing arguments can be used optionally:", "\n - `...` ui_args elements will be passed to the module argument of the same name or to the `...`" ) } + if (any(c("data", "datasets") %in% ui_formals)) { + stop( + sprintf("Called from module(label = \"%s\", ...)\n ", label), + "`ui` with `data` or `datasets` argument is no longer accepted.\n ", + "If some `ui` inputs depend on data please fix your `server` instead.\n ", + "Possible solutions are renderUI() or updateXyzInput() functions.", + ) + } + ui_extra_args <- setdiff(names(ui_args), ui_formals) if (length(ui_extra_args) > 0 && !"..." %in% ui_formals) { stop( diff --git a/man/module.Rd b/man/module.Rd index a144f8250b..b945a69328 100644 --- a/man/module.Rd +++ b/man/module.Rd @@ -45,8 +45,6 @@ the \code{filters} argument. \item{ui}{(\code{function}) Shiny \code{ui} module function with following arguments: \itemize{ \item \code{id} - teal will set proper shiny namespace for this module. -\item \code{data} (optional) module will receive list of reactive (filtered) data specified in the \code{filters} argument. -\item \code{datasets} (optional) module will receive \code{FilteredData}. (See \verb{[teal.slice::FilteredData]}). \item \code{...} (optional) \code{ui_args} elements will be passed to the module named argument or to the \code{...}. }} diff --git a/tests/testthat/test-module_nested_tabs.R b/tests/testthat/test-module_nested_tabs.R index d40bdc60e7..b92383d9a0 100644 --- a/tests/testthat/test-module_nested_tabs.R +++ b/tests/testthat/test-module_nested_tabs.R @@ -249,10 +249,12 @@ testthat::test_that("srv_nested_tabs.teal_module passes data to the server modul ) }) -testthat::test_that("srv_nested_tabs.teal_module passes datasets to the server module", { - module <- module(server = function(id, datasets) { - moduleServer(id, function(input, output, session) checkmate::assert_class(datasets, "FilteredData")) - }) +testthat::test_that("srv_nested_tabs.teal_module passes (deprecated) datasets to the server module", { + module <- lifecycle::expect_deprecated( + module(server = function(id, datasets) { + moduleServer(id, function(input, output, session) checkmate::assert_class(datasets, "FilteredData")) + }) + ) testthat::expect_error( shiny::testServer( @@ -290,26 +292,6 @@ testthat::test_that("srv_nested_tabs.teal_module passes server_args to the ...", ) }) -testthat::test_that("srv_nested_tabs.teal_module warns if both data and datasets are passed", { - module <- module(datanames = NULL, label = "test module", server = function(id, datasets, data) { - moduleServer(id, function(input, output, session) NULL) - }) - - testthat::expect_warning( - shiny::testServer( - app = srv_nested_tabs, - args = list( - id = "test", - datasets = list(`test module` = filtered_data), - modules = modules(module), - reporter = teal.reporter::Reporter$new() - ), - expr = NULL - ), - "Module 'test module' has `data` and `datasets` arguments in the formals" - ) -}) - fp_api <- teal.slice:::FilterPanelAPI$new(filtered_data) testthat::test_that("srv_nested_tabs.teal_module doesn't pass filter_panel_api if not in the args explicitly", { module <- module(server = function(id, ...) { diff --git a/tests/testthat/test-modules.R b/tests/testthat/test-modules.R index 4c936ae715..7dc93f2941 100644 --- a/tests/testthat/test-modules.R +++ b/tests/testthat/test-modules.R @@ -1,17 +1,13 @@ -call_module_server_fun <- function(input, output, session, data, datasets) { +call_module_server_fun <- function(input, output, session, data) { } -module_server_fun <- function(id, datasets) { +module_server_fun <- function(id, data) { } ui_fun1 <- function(id, ...) { tags$p(paste0("id: ", id)) } -ui_fun2 <- function(id, datasets) { - tags$p(paste0("id: ", id)) -} - testthat::test_that("Calling module() does not throw", { testthat::expect_no_error(suppressMessages(module())) }) @@ -28,6 +24,14 @@ testthat::test_that("module requires label argument to be a string different tha testthat::expect_error(module(label = "global_filters"), "is reserved in teal") }) +testthat::test_that("module warns when server contains datasets argument", { + testthat::expect_warning( + module(server = function(id, datasets) NULL), + "`datasets` argument in the `server` is deprecated" + ) +}) + + testthat::test_that("module expects server being a shiny server module with any argument", { testthat::expect_no_error(module(server = function(id) NULL)) @@ -74,6 +78,11 @@ testthat::test_that("module requires ui_args argument to be a list", { testthat::expect_error(module(ui_args = list(1, 2, 3)), "Must have names") }) +testthat::test_that("module throws when ui has data or datasets argument", { + testthat::expect_error(module(ui = function(id, data) NULL)) + testthat::expect_error(module(ui = function(id, datasets) NULL)) +}) + testthat::test_that("module expects ui being a shiny ui module with any argument", { testthat::expect_no_error(module(ui = function(id) NULL)) testthat::expect_no_error(module(ui = function(id, any_argument) NULL)) @@ -381,7 +390,7 @@ testthat::test_that("is_arg_used throws error if object is not teal_module or te }) testthat::test_that("is_arg_used returns true if teal_module has given `arg` in server function args", { - testthat::expect_true(is_arg_used(module(server = function(id, datasets, reporter) NULL), "reporter")) + testthat::expect_true(is_arg_used(module(server = function(id, data, reporter) NULL), "reporter")) }) testthat::test_that("is_arg_used returns false if teal_module does not have reporter in server function args", { @@ -399,7 +408,7 @@ testthat::test_that("is_arg_used returns false if teal_modules has no children u }) testthat::test_that("is_arg_used returns true if teal_modules has at least one child using given `arg`", { - server_fun_with_reporter <- function(id, datasets, reporter) NULL + server_fun_with_reporter <- function(id, data, reporter) NULL mod <- module() mod_with_reporter <- module(server = server_fun_with_reporter) From e0ce9f47a09777bdb8e6f13d4e6159d0e532efc9 Mon Sep 17 00:00:00 2001 From: Aleksander Chlebowski <114988527+chlebowa@users.noreply.github.com> Date: Thu, 30 Nov 2023 12:20:47 +0100 Subject: [PATCH 13/36] vignette introduction (#977) * adapted to `teal_data` class * mentioned and linked `teal_data_module` * replaced outdated image * added color legend to image --------- Signed-off-by: Vedha Viyash <49812166+vedhav@users.noreply.github.com> Co-authored-by: Vedha Viyash <49812166+vedhav@users.noreply.github.com> --- _pkgdown.yml | 2 +- ...teal.Rmd => getting-started-with-teal.Rmd} | 31 +++++++++++------- vignettes/images/example_app.png | Bin 92587 -> 137524 bytes vignettes/images/filter_panel.png | Bin 38808 -> 47300 bytes 4 files changed, 21 insertions(+), 12 deletions(-) rename vignettes/{teal.Rmd => getting-started-with-teal.Rmd} (70%) diff --git a/_pkgdown.yml b/_pkgdown.yml index 93e03f0ec4..a94a775698 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -48,7 +48,7 @@ articles: - title: Get Started navbar: ~ contents: - - teal + - getting-started-with-teal - title: Using teal navbar: Using teal contents: diff --git a/vignettes/teal.Rmd b/vignettes/getting-started-with-teal.Rmd similarity index 70% rename from vignettes/teal.Rmd rename to vignettes/getting-started-with-teal.Rmd index 5b79234de0..d3c65345da 100644 --- a/vignettes/teal.Rmd +++ b/vignettes/getting-started-with-teal.Rmd @@ -47,11 +47,11 @@ if (interactive()) { As shown in the image above, this application consists of several distinct areas: -* Application header: the title of the application shown at the top. -* `teal` modules (bar at the top): in this case a simple module named "example teal module". -* Encoding panel (panel on the left hand side): Module specific UI components, in this case a drop-down to select a dataset name. -* Main output panel (panel on the middle): The outputs of the module, for this example module the chosen dataset is displayed. -* Filter panel (panels on the right hand side): for filtering the data to be passed into all `teal` modules. +* Application Header (title at the top): is the title of the application. +* Teal Modules (bar under the title): in this case a simple module named "example teal module". +* Encoding Panel (panel on the left hand side): Module specific UI components, in this case a drop-down to select a dataset name. +* Main Output Panel (panel on the middle): The outputs of the module, for this example module the chosen dataset is displayed. +* Filter Panel (panel on the right hand side): for filtering the data to be passed into all `teal` modules. ### Encoding panel @@ -70,7 +70,7 @@ In the example below: * For the `IRIS` dataset, only rows satisfying the conditions `Petal.Length >= 3.4` and `Species %in% c("setosa", "virginica")` are included, thereby keeping 50 rows. * For the `MTCARS` dataset, only rows satisfying the condition `cyl %in% c(4, 6)` are included, thereby keeping 18 rows. -Example filter panel +Example filter panel ## Creating your own applications @@ -78,23 +78,32 @@ The key function to use to create your `teal` application is `init`, which requi ### Application Data -The `data` argument to the `init` function specifies the data used by your application. This can be data currently in your R session, as in the example above, but also `connectors`, which describe how to "pull" remote data when the application is run. Connectors can pull data from external sources, which may require authentication. +The `data` argument to the `init` function specifies the data used by your application. +In the example above this is data that exists in the global environment. +We call `teal_data` to bind all datasets into one R object of class `teal_data`. +We could also specify relationships between the datasets using the `join_keys` argument but in this case the datasets are not related. +If data is not available and has to be pulled from a remote source, `init` must receive a `teal_data_module` that specifies how to obtain the desired datasets and put them into a `teal_data` object. +See [this vignette](data-as-shiny-module.html) for details. -In the example above we call `teal_data` to convert raw datasets into `teal` specific datasets and to bind them in one `R` object. This function can also be used to specify relationships between different datasets. In order to use `CDISC` clinical trial data in a `teal` application the `cdisc_data` function is used instead. +In order to use `CDISC` clinical trial data in a `teal` application the `cdisc_data` function is used instead. For further details we recommend exploring the [`teal.data`](https://insightsengineering.github.io/teal.data/) package documentation. ### Modules -The `modules` argument to `init` consists of a list of `teal` modules (which can be wrapped together using the function `modules`). We recommend creating applications using predefined `teal` modules. See the references below for links to these modules. +The `modules` argument to `init` consists of a list of `teal` modules (which can be wrapped together using the function `modules`). +We recommend creating applications using predefined `teal` modules. +See the references below for links to these modules. ### Defining Filters -The optional `filter` argument in `init` allows you to initialize the application with predefined filters. See the documentation for `init` for further details. +The optional `filter` argument in `init` allows you to initialize the application with predefined filters. +See the documentation for `init` for further details. ### Reporting -If any of the `modules` in your `teal` application support reporting (see [`teal.reporter`](https://insightsengineering.github.io/teal.reporter/) for more details), users of your application can add the outputs of the modules to a report. This report can then be downloaded and a special _Report Previewer_ module will be added to your application as an additional tab, where users can view and configure their reports before downloading them. +If any of the `modules` in your `teal` application support reporting (see [`teal.reporter`](https://insightsengineering.github.io/teal.reporter/) for more details), users of your application can add the outputs of the modules to a report. +This report can then be downloaded and a special _Report Previewer_ module will be added to your application as an additional tab, where users can view and configure their reports before downloading them. ## Where to go next diff --git a/vignettes/images/example_app.png b/vignettes/images/example_app.png index 553ecd7cd9fdba3724541d5259ac066d5a17a829..8c8469c7df3577ba705365c99bfe7c2e05004e3f 100644 GIT binary patch literal 137524 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 QZNNuM{o=X&Ggd+W1+SD6aR2}S literal 92587 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 njO)lJ~x!T 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 n#lkNWO7)VU>)%njd$aI{>C^uK)CP9B diff --git a/vignettes/images/filter_panel.png b/vignettes/images/filter_panel.png index 66b22b35e1740077cdc1fbe540f022929de74613..d7adcd60cd6172c44501cd9b3e85c0c963169e62 100644 GIT binary patch literal 47300 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 literal 38808 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 SeUgliOj$ugzU;om%l{8a0~($H From c9c841f71bbb680ba83e190e2b3893d1b423c4ca Mon Sep 17 00:00:00 2001 From: Aleksander Chlebowski <114988527+chlebowa@users.noreply.github.com> Date: Thu, 30 Nov 2023 13:23:12 +0100 Subject: [PATCH 14/36] vignette data (#990) * adapted to `teal_data` class * removed vignettes `including-general-data-in-teal`, `including-adam-data-in-teal`, `including-mae-data-in-teal`, and `preprocessing-data` * added vignette `data-in-teal` --- .gitignore | 1 + _pkgdown.yml | 5 +- vignettes/including-adam-data-in-teal.Rmd | 113 -------- .../including-data-in-teal-applications.Rmd | 247 ++++++++++++++++++ vignettes/including-general-data-in-teal.Rmd | 45 ---- vignettes/including-mae-data-in-teal.Rmd | 39 --- vignettes/preprocessing-data.Rmd | 85 ------ 7 files changed, 249 insertions(+), 286 deletions(-) delete mode 100644 vignettes/including-adam-data-in-teal.Rmd create mode 100644 vignettes/including-data-in-teal-applications.Rmd delete mode 100644 vignettes/including-general-data-in-teal.Rmd delete mode 100644 vignettes/including-mae-data-in-teal.Rmd delete mode 100644 vignettes/preprocessing-data.Rmd diff --git a/.gitignore b/.gitignore index b2a7690edf..a78ab40e4c 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ tmp.* vignettes/*.R vignettes/*.html vignettes/*.md +inst/doc diff --git a/_pkgdown.yml b/_pkgdown.yml index a94a775698..cb00d33304 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -58,10 +58,7 @@ articles: - title: Data in teal Apps navbar: Data in teal Apps contents: - - including-adam-data-in-teal - - including-general-data-in-teal - - including-mae-data-in-teal - - preprocessing-data + - including-data-in-teal-applications - data-as-shiny-module - title: Extending teal navbar: Extending teal diff --git a/vignettes/including-adam-data-in-teal.Rmd b/vignettes/including-adam-data-in-teal.Rmd deleted file mode 100644 index 428bff9f88..0000000000 --- a/vignettes/including-adam-data-in-teal.Rmd +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: "Using ADaM Data in teal Applications" -author: "NEST CoreDev" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{Using ADaM Data in teal Applications} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -## Introduction - -To include `ADaM` data in a `teal` app, the `teal.data::cdisc_data` function is used. - -`cdisc_data` allows `teal` applications to include multiple datasets, identifying merge keys and providing information to produce R code for reproducibility. - -There is an advantage to passing `CDISC` datasets that adhere to `ADaM` standards to these functions in that the code is minimized. However, the dataset-related functions also include the flexibility to work with non-standard datasets provided that merge keys and the relationship between the datasets are specified. - -The examples below illustrate the usage of these different dataset functions for example `cdisc_dataset` and `dataset`. For more information, see documentation in `teal.data`. - -## Keys - -Primary keys serve as unique row identifiers in individual datasets and thus need to be specified for each dataset and dataset connector. These can be specified on the most general dataset constructor, `dataset`, as shown below. - -```{r, message=FALSE} -library(teal) - -# using cdisc_dataset, keys are automatically derived for standard datanames -# (although they can be overwritten) -adsl <- data.frame( - STUDYID = "study", - USUBJID = 1:10, - SEX = sample(c("F", "M"), 10, replace = TRUE), - AGE = rpois(10, 40) -) -dataset_adsl <- cdisc_dataset("ADSL", adsl) -class(dataset_adsl) -``` - -When passing multiple datasets to the `cdisc_data` function, dataset relationship are set using `join_keys` and `join_key` and these are used to merge datasets together within `teal` apps. - -In the example below, two standard `CDISC` datasets (`ADSL` and `ADTTE`) are passed to `cdisc_data`. In the case of `CDISC` datasets that adhere to `ADaM` standards, the merge keys do not need to be manually specified. Keys are automatically added if `dataname` matches one of the implemented standards as documented in the `cdisc_dataset` function. This minimizes the code needed to allow data merges as seen in this example: - -```{r, message=FALSE} -adsl <- data.frame( - STUDYID = "study", - USUBJID = 1:10, - SEX = sample(c("F", "M"), 10, replace = TRUE), - AGE = rpois(10, 40) -) -adtte <- rbind(adsl, adsl, adsl) -adtte$PARAMCD <- rep(c("OS", "EFS", "PFS"), each = 10) -adtte$AVAL <- c( - rnorm(10, mean = 700, sd = 200), # dummy OS level - rnorm(10, mean = 400, sd = 100), # dummy EFS level - rnorm(10, mean = 450, sd = 200) # dummy PFS level -) - -cdisc_data_obj <- cdisc_data( - ADSL = adsl, ADTTE = adtte, - code = ' - adsl <- data.frame( - STUDYID = "study", - USUBJID = 1:10, - SEX = sample(c("F", "M"), 10, replace = TRUE), - AGE = rpois(10, 40) - ) - adtte <- rbind(adsl, adsl, adsl) - adtte$PARAMCD <- rep(c("OS", "EFS", "PFS"), each = 10) - adtte$AVAL <- c( - rnorm(10, mean = 700, sd = 200), # dummy OS level - rnorm(10, mean = 400, sd = 100), # dummy EFS level - rnorm(10, mean = 450, sd = 200) # dummy PFS level - )' -) -class(cdisc_data_obj) -``` - -which is equivalent to: -```{r, message=FALSE} -example_data <- cdisc_data( - ADSL = adsl, ADTTE = adtte, - code = ' - adsl <- data.frame( - STUDYID = "study", - USUBJID = 1:10, - SEX = sample(c("F", "M"), 10, replace = TRUE), - AGE = rpois(10, 40) - ) - adtte <- rbind(adsl, adsl, adsl) - adtte$PARAMCD <- rep(c("OS", "EFS", "PFS"), each = 10) - adtte$AVAL <- c( - rnorm(10, mean = 700, sd = 200), - rnorm(10, mean = 400, sd = 100), - rnorm(10, mean = 450, sd = 200) - )' -) -class(cdisc_data_obj) -``` - -The `teal.data::join_keys` function is used to specify keys: - -- [`teal.data::join_keys`](https://insightsengineering.github.io/teal.data/latest-tag/reference/join_keys.html) is a collection of multiple `teal.data::join_key` entries -- [`teal.data::join_key`](https://insightsengineering.github.io/teal.data/latest-tag/reference/join_key.html) specifies the relation between two datasets: - - `dataset_1`, `dataset_2` - name of two datasets - - `key` - optionally named vector of column names - -Note that it is assumed that join keys are symmetric, i.e. `join_key("x", "y", "x_col" = "y_col")` will enable merge from "x" to "y" and vice-versa. - - -## Further Reading - -For more information about preprocessing, reproducibility, relationships between datasets and `DDL`, please refer to the [`teal.data` package](https://insightsengineering.github.io/teal.data/). diff --git a/vignettes/including-data-in-teal-applications.Rmd b/vignettes/including-data-in-teal-applications.Rmd new file mode 100644 index 0000000000..77844d1ebf --- /dev/null +++ b/vignettes/including-data-in-teal-applications.Rmd @@ -0,0 +1,247 @@ +--- +title: "Including Data in teal Applications" +author: "NEST CoreDev" +output: + rmarkdown::html_vignette: + toc: true + toc_depth: 5 + number_sections: false +vignette: > + %\VignetteIndexEntry{Including Data in teal Applications} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>" +) +``` + +## Data in `teal` Applications + +While the `teal` framework is mainly geared towards clinical data that conforms to the `ADaM` standard, general, non-relational data is handled just as well and the mechanism of passing data to applications is virtually the same. +Also, modules in `teal.modules.general` have been designed to work with general data. + +All applications use the `teal_data` class as a data container. +`teal_data` objects are passed to `init` to build the application, where they are modified by the filter panel (if applicable) and passed on to modules. +Thus, the first step of building a `teal` app is creating a `teal_data` object. + +### General Data + +A `teal_data` object is created by calling the `teal_data` function and passing data objects as `name:value` pairs. + +```{r, message=FALSE} +library(teal) + +# create teal_data +data <- teal_data(iris = iris, cars = mtcars) +``` + +Note that `iris` and `cars` have been added to the `datanames` property of `data` (see [`datanames` property](#datanames)). + +This is sufficient to run a `teal` app. + +```{r, eval=FALSE} +# build app +app <- init( + data = data, + modules = example_module() +) + +# run app +shinyApp(app$ui, app$server) +``` + +### Reproducible Data + +A `teal_data` stores data in a separate environment. +Therefore, modifying the stored datasets requires that code be evaluated in that environment. +Following that logic, one can create an empty `teal_data` object and populate it by evaluating code. +This can be done using the `eval_code` function or, more conveniently, using the `within` function. + +```{r} +# create empty object +data0 <- teal_data() + +# run code in the object +data1 <- teal.code::eval_code(data0, code = "iris <- iris + cars <- mtcars" +) +# alternative +data2 <- within(data0, { + iris <- iris + cars <- mtcars +}) +``` + +The key difference between `eval_code` and `within` is that the former accepts code as character vector or language objects (calls and expressions), while `within` accepts _only_ inline code. +See `?eval_code` for more details. + +Note that with `data` the code that created the data objects is unknown so the process cannot be reproduced. +The necessary code can be added with the `code` argument of the `teal_data` function but in that case the code may not reproduce the environment. +Such an object is considered _unverified_ (see [`verified` property](#verified)). + +If reproducibility is required, we recommend creating `teal_data` empty and evaluating code. + +###### code from file + +The ability to pass code as character vector to `eval_code` opens the door to using code stored in a file. +```{r, eval=FALSE} +# not run +data_from_file <- teal_data() +data_from_file <- eval_code(data, readLines("")) +``` + +### Creating Data In-App + +The one departure from passing a `teal_data` object to `init` is when the data does not exist in the environment where the app is run, _e.g._ when it has to be pulled from a remote source. +In those cases a `teal_data_module` must be used. +See [this vignette](data-as-shiny-module.html) for a detailed description. + +
+ +## Clinical Data + +Currently `teal` supports two specialized data formats. + +### `ADaM` Data + +The `ADaM` data model specifies relationships between `CDISC` datasets. +The `cdisc_data` function takes advantage of that fact to to automatically set default joining keys (see [`join_keys` property](#join_keys)). +In the example below, two standard `CDISC` datasets (`ADSL` and `ADTTE`) are passed to `cdisc_data`. + +```{r} +# create cdisc_data +data_cdisc <- cdisc_data(ADSL = teal.data::rADSL, ADTTE = teal.data::rADSL) + +datanames(data_cdisc) +join_keys(data_cdisc) +``` + + +```{r, eval=FALSE} +app <- init( + data = data_cdisc, + modules = example_module() +) +shinyApp(app$ui, app$server) +``` + +### `MultiAssayExperiment` Data + +The `MultiAssayExperiment` package offers a data structure for representing and analyzing multi-omics experiments: a biological analysis approach utilizing multiple types of observations, such as DNA mutations and abundance of RNA and proteins, in the same biological specimens. + +The `MultiAssayExperiment` class is described in detail [here](https://www.bioconductor.org/packages/release/bioc/vignettes/MultiAssayExperiment/inst/doc/MultiAssayExperiment.html). + +`MultiAssayExperiment` objects (MAEs) are placed in `teal_data` just like normal objects. + +```{r, eval=FALSE} +library(MultiAssayExperiment) +utils::data(miniACC) + +data_mae <- teal_data(MAE = miniACC) + +app <- init( + data = data_mae, + modules = example_module() +) +shinyApp(app$ui, app$server) +``` + +Note that due to the unique structure of a MAE `teal` requires special considerations when building `teal` modules. +Therefore, we cannot guarantee that all modules will work properly with MAEs. +The package [`teal.modules.hermes`](https://insightsengineering.github.io/teal.modules.hermes/latest-tag/) has been developed specifically with MAE in mind and will be more reliable. + +The filter panel supports MAEs out of the box. + +
+ +## `teal_data` properties + +##### `datanames` + +The `datanames` property lists the objects stored in the `teal_data` that constitute datasets of interest. +Objects passed to `teal_data` become automatically listed in the `datanames` property of the resulting object. +Objects created in `teal_data` by evaluating code need not be data objects of interest and as such they are not automatically added to `datanames`. +Use the `datanames` function to modify the `datanames` property. + +```{r} +data_with_objects <- teal_data(iris = iris, cars = mtcars) +data_with_code <- teal_data() %>% + within({ + iris <- iris + cars <- mtcars + not_a_dataset <- "data source credits" + }) +datanames(data_with_objects) +datanames(data_with_code) +datanames(data_with_code) <- c("iris", "cars") +datanames(data_with_code) +``` + +All `teal` modules take a `datanames` argument that determines which datasets they are to have access to. +Only objects enumerated in the `datanames` property of the `teal_data` object can be used. + +For a detailed explanation of datanames, see [this `teal.data` vignette](https://insightsengineering.github.io/teal.data/latest-tag/articles/teal-data.html). + +[(back to General Data)](#general-data) + +##### `join_keys` + +Using relational data requires specifying joining keys for each pair of datasets. +Primary keys are unique row identifiers in individual datasets and thus should be specified for each dataset. +Foreign keys describe mapping of variables between datasets. +Joining keys are stored in the `join_keys` property, which can be set when creating a `teal_data` object, using the `join_keys` argument, or using the `join_keys` function. + +```{r} +ds1 <- data.frame( + id = seq(1, 10), + group = rep(c("A", "B"), each = 5) +) +ds2 <- data.frame( + group = c("A", "B"), + condition = c("condition1", "condition2") +) +keys <- join_keys( + join_key("DS1", keys = "id"), + join_key("DS2", keys = "group"), + join_key("DS1", "DS2", keys = c("group" = "group")) +) +data_relational1 <- teal_data(DS1 = ds1, DS2 = ds2, join_keys = keys) +data_relational2 <- teal_data(DS1 = ds1, DS2 = ds2) +join_keys(data_relational2) <- keys +``` + +For a detailed explanation of join keys, see [this `teal.data` vignette](https://insightsengineering.github.io/teal.data/latest-tag/articles/join-keys.html). + +[(back to `ADaM` Data)](#adam-data) + +##### `verified` + +`teal_data` allows for tracking code from data creation through filtering through analysis so that the whole process can be reproduced. +The `verified` property designates whether or not reproducibility has been confirmed. +`teal_data` objects that are created empty and are only modified by evaluating code in them are verified by default. +Ones created with data objects alone or with data objects and code are not verified by default but can become verified by running the `verify` function. + +```{r} +data_with_code + +data_with_objects_and_code <- teal_data(iris = iris, cars = mtcars, code = expression(iris <- iris, cars <- mtcars)) +data_with_objects_and_code + +data_with_objects_and_code_verified <- verify(data_with_objects_and_code) +data_with_objects_and_code_verified +``` + + +For a detailed explanation of verification, see [this `teal.data` vignette](https://insightsengineering.github.io/teal.data/latest-tag/articles/teal-data-reproducibility.html). + +[(back to Reproducible Data)](#reproducible-data) + +
+ +## Further Reading + +For a complete guide to the `teal_data` class, please refer to the [`teal.data` package](https://insightsengineering.github.io/teal.data/latest-tag/). diff --git a/vignettes/including-general-data-in-teal.Rmd b/vignettes/including-general-data-in-teal.Rmd deleted file mode 100644 index 75c14cbd80..0000000000 --- a/vignettes/including-general-data-in-teal.Rmd +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: "Using General Data in teal Applications" -author: "NEST CoreDev" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{Using General Data in teal Applications} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -## Introduction - -`teal` applications are not restricted to `CDISC`-standard data. Although many `teal` modules included with `NEST` are designed for `CDISC` data, those in the library `teal.modules.general` have been designed to work with non-relational data. - -This example application uses the standard `iris` and `mtcars` datasets: - -```{r, message=FALSE} -library(teal) - -app <- init( - data = teal_data( - IRIS = iris, CARS = mtcars, - code = "IRIS <- iris - CARS <- mtcars" - ), - modules = example_module() -) - -if (interactive()) { - shinyApp(app$ui, app$server) -} -``` - -For more information, see documentation in `teal.data`. - -## Delayed Data Loading (`DDL`) - -`teal` provides the ability to pull remote data and use it in the app. Additional user authentication may be necessary. - -To learn more about `DDL`, visit the appropriate vignette in `teal.data`. - - -## Further Reading - -For more information about preprocessing, reproducibility, relationships between datasets and `DDL`, please refer to the [`teal.data` package](https://insightsengineering.github.io/teal.data/). diff --git a/vignettes/including-mae-data-in-teal.Rmd b/vignettes/including-mae-data-in-teal.Rmd deleted file mode 100644 index c614dc7a1f..0000000000 --- a/vignettes/including-mae-data-in-teal.Rmd +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: "Using MultiAssayExperiment data in teal Applications" -author: "NEST CoreDev" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{Using MultiAssayExperiment data in teal Applications} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -## `MultiAssayExperiment` data -`MultiAssayExperiment` offers a data structure for representing and analyzing multi-omics experiments: a biological analysis approach utilizing multiple types of observations, such as DNA mutations and abundance of RNA and proteins, in the same biological specimens. - -`MultiAssayExperiment` data is described in detail [here](https://www.bioconductor.org/packages/release/bioc/vignettes/MultiAssayExperiment/inst/doc/MultiAssayExperiment.html). - - -## Example Application -The example below represents an application including `MultiAssayExperiment` data. - -```{r, eval = FALSE} -library(teal) -utils::data(miniACC, package = "MultiAssayExperiment") - -app <- init( - data = teal_data(MAE = miniACC), - modules = example_module() -) - -if (interactive()) { - shinyApp(app$ui, app$server) -} -``` - -The filter panel supports `MAE` data out of the box, but `teal` itself does not guarantee that any module will work with `MAE` data the same way it works with other types of data (e.g. `ADaM`) because `MAE` has a unique structure that requires special consideration when developing a module. The package [`teal.modules.hermes`](https://insightsengineering.github.io/teal.modules.hermes/) has been specifically developed for the analysis of `MAE` data. - - -## Further Reading - -For more information about preprocessing, reproducibility, relationships between datasets and `DDL`, please refer to the [`teal.data` package](https://insightsengineering.github.io/teal.data/). diff --git a/vignettes/preprocessing-data.Rmd b/vignettes/preprocessing-data.Rmd deleted file mode 100644 index 38848a5ea5..0000000000 --- a/vignettes/preprocessing-data.Rmd +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: "Preprocessing Data" -author: "NEST CoreDev" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{Preprocessing Data} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -## Usage in `teal` apps -In this vignette, we will show how to use preprocessed data in `teal` apps. The basics of data preprocessing have been discussed in `teal.data` [here](https://insightsengineering.github.io/teal.data/latest-tag/articles/preprocessing-data.html). - -In a `teal` app providing the code in a copy-paste style is cumbersome and can lead to an out-of-sync situation where the code does not represent the preprocessing code anymore. We therefore use the `teal.data::get_code` function to extract the preprocessing code from the `app.R` file. The `get_code` function requires `#` tags to indicate which lines of code in `app.R` need be included in the preprocessing code. `get_code` understands the following tags: - -- Enclosing preprocessing code between `#code>` `#` `#NOTE:** make sure to save the code in a file called `app.R`): - -```{r eval=FALSE} -# Code needs modification before it can be run: -# - save as app.R -# for the purpose of example save the file to current directory -library(teal) - -# code> -new_iris <- transform(iris, id = seq_len(nrow(iris))) -# -# data import -new_iris <- transform(iris, id = seq_len(nrow(iris))) - -excluded_obj1 <- 1:10 # nocode - -# nocode> -excluded_obj2 <- 1:10 -# Date: Thu, 30 Nov 2023 12:25:29 +0000 Subject: [PATCH 15/36] [skip actions] Restyle files --- vignettes/including-data-in-teal-applications.Rmd | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/vignettes/including-data-in-teal-applications.Rmd b/vignettes/including-data-in-teal-applications.Rmd index 77844d1ebf..88f25a876c 100644 --- a/vignettes/including-data-in-teal-applications.Rmd +++ b/vignettes/including-data-in-teal-applications.Rmd @@ -67,8 +67,7 @@ data0 <- teal_data() # run code in the object data1 <- teal.code::eval_code(data0, code = "iris <- iris - cars <- mtcars" -) + cars <- mtcars") # alternative data2 <- within(data0, { iris <- iris @@ -169,7 +168,7 @@ Use the `datanames` function to modify the `datanames` property. ```{r} data_with_objects <- teal_data(iris = iris, cars = mtcars) -data_with_code <- teal_data() %>% +data_with_code <- teal_data() %>% within({ iris <- iris cars <- mtcars From dda004d5f5fa35c9dccfe63f3add679b7940d40c Mon Sep 17 00:00:00 2001 From: Aleksander Chlebowski <114988527+chlebowa@users.noreply.github.com> Date: Thu, 30 Nov 2023 13:30:16 +0100 Subject: [PATCH 16/36] vignette custom modules (#980) * adapted to `teal_data` class * generalized example module * dropped mentions of `teal.transform` --- vignettes/creating-custom-modules.Rmd | 127 +++++++++++++------------- 1 file changed, 61 insertions(+), 66 deletions(-) diff --git a/vignettes/creating-custom-modules.Rmd b/vignettes/creating-custom-modules.Rmd index dbaa62b1e4..aa20118191 100644 --- a/vignettes/creating-custom-modules.Rmd +++ b/vignettes/creating-custom-modules.Rmd @@ -1,6 +1,6 @@ --- title: "Creating Custom Modules" -author: "Nikolas Burkoff" +author: "NEST CoreDev" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Creating Custom Modules} @@ -10,7 +10,8 @@ vignette: > ## Introduction -The `teal` framework provides a large number of analysis modules to be incorporated into `teal` applications. However, it is also possible to create your own modules using the `module` function. +The `teal` framework provides a large number of analysis modules to be incorporated into `teal` applications. +However, it is also possible to create your own modules using the `module` function. Here is an implementation of a simple module: @@ -21,16 +22,17 @@ example_module <- function(label = "example teal module") { module( label, server = function(id, data) { - checkmate::assert_class(data, "tdata") + checkmate::assert_class(data, "reactive") + checkmate::assert_class(isolate(data()), "teal_data") moduleServer(id, function(input, output, session) { - output$text <- renderPrint(data[[input$dataname]]()) + output$text <- renderPrint(data()[[input$dataname]]) }) }, ui = function(id, data) { ns <- NS(id) teal.widgets::standard_layout( output = verbatimTextOutput(ns("text")), - encoding = selectInput(ns("dataname"), "Choose a dataset", choices = names(data)) + encoding = selectInput(ns("dataname"), "Choose a dataset", choices = datanames(data)) ) }, datanames = "all" @@ -44,9 +46,13 @@ which can be added into `teal` apps using `example_module(label = "Label for tab ### UI function -This function contains the UI required for the module. It should be a function with at least the arguments `id`. It can also contain the argument `data` for access to the application data. See the server section below for more details. +This function contains the UI required for the module. +It should be a function with at least the arguments `id`. +It can also contain the argument `data` for access to the application data. +See the server section below for more details. -The UI function can contain standard UI components alongside additional widgets provided by the `teal.widgets` package. In the example above we are using the `standard_layout` function of `teal.widgets` which generates a layout +The UI function can contain standard UI components alongside additional widgets provided by the `teal.widgets` package. +In the example above we are using the `standard_layout` function of `teal.widgets` which generates a layout including an encoding panel on the left and main output covering the rest of the module's UI. ### Server function @@ -66,7 +72,8 @@ function(id, ``` -When used inside a `teal` application called with `init`, the `data` argument is a named list of reactive `data.frame`s containing the data after having been filtered through the filter panel. It is of the `tdata` type and can be created using the `new_tdata` function. +When used inside a `teal` application called with `init`, the `data` argument is a named list of reactive `data.frame`s containing the data after having been filtered through the filter panel. +It is of the `tdata` type and can be created using the `new_tdata` function. ## A More Complicated Example @@ -84,18 +91,14 @@ See the package and function documentation for further details. library(teal) # ui function for the module -# histogram_var is a teal.transform::data_extract_spec object -# specifying which columns of which datasets users can choose -ui_histogram_example <- function(id, histogram_var) { +# allows for selecting dataset and one of its numeric variables +ui_histogram_example <- function(id) { ns <- NS(id) teal.widgets::standard_layout( output = plotOutput(ns("plot")), encoding = div( - teal.transform::data_extract_ui( - id = ns("histogram_var"), - label = "Variable", - data_extract_spec = histogram_var - ) + uiOutput(ns("datasets")), + uiOutput(ns("numerics")) ), # we have a show R code button to show the code needed # to generate the histogram @@ -104,45 +107,49 @@ ui_histogram_example <- function(id, histogram_var) { } # server function for the module -# histogram_var is a teal.transform::data_extract_spec object -# specifying which columns of which datasets users can choose -srv_histogram_example <- function(id, data, histogram_var) { - checkmate::assert_class(data, "tdata") +# presents datasets and numeric variables for selection +# displays a histogram of the selected variable +srv_histogram_example <- function(id, data) { + checkmate::assert_class(data, "reactive") + checkmate::assert_class(isolate(data()), "teal_data") + moduleServer(id, function(input, output, session) { - # get the selected dataset and column from the UI - extracted <- teal.transform::data_extract_srv( - id = "histogram_var", - datasets = data, - data_extract_spec = histogram_var, - join_keys = teal.data::join_keys(data) - ) + ns <- session$ns - dataname <- reactive(extracted()$dataname) - selected <- reactive(extracted()$select) + # present dataset and variable choices + # each selection stored in separate reactive expression + output$datasets <- renderUI({ + selectInput(ns("datasets"), "select dataset", datanames(data())) + }) + dataset <- reactive(input$datasets) + output$numerics <- renderUI({ + req(dataset()) + nums <- vapply(data()[[dataset()]], is.numeric, logical(1L)) + selectInput(ns("numerics"), "select numeric variable", names(nums[nums])) + }) + selected <- reactive(input$numerics) - # the reactive which adds the code to plot the histogram into the qenv + # add plot code plot_code_q <- reactive({ - validate(need(length(selected) == 1, "Please select a variable")) - - # take the filtered data from the data object and add it into the qenv environment - teal.code::new_qenv(tdata2env(data), code = get_code_tdata(data)) %>% - teal.code::eval_code( - substitute( - expr = p <- hist(dataname[, selected]), - env = list( - dataname = as.name(dataname()), - selected = selected() - ) - ) - ) + validate(need(length(dataset()) == 1L, "Please select a dataset")) + validate(need(length(selected()) == 1L, "Please select a variable")) + req(selected() %in% names(data()[[dataset()]])) + + # evaluate plotting expression within data + # inject input values into plotting expression + within( + data(), + p <- hist(dataset[, selected], las = 1), + dataset = as.name(dataset()), selected = selected() + ) }) - # shiny component to view + # view plot output$plot <- renderPlot({ plot_code_q()[["p"]] }) - # Show the R code when user clicks 'Show R Code' button + # code upon clicking 'Show R Code' button teal.widgets::verbatim_popup_srv( id = "rcode", verbatim_content = reactive(teal.code::get_code(plot_code_q())), @@ -151,17 +158,12 @@ srv_histogram_example <- function(id, data, histogram_var) { }) } -# the function which creates the teal module for users -tm_histogram_example <- function(label, histogram_var) { - checkmate::assert_character(label) - checkmate::assert_class(histogram_var, "data_extract_spec") - +# function that creates module instance to use in `teal` app +tm_histogram_example <- function(label) { module( label = label, server = srv_histogram_example, ui = ui_histogram_example, - ui_args = list(histogram_var = histogram_var), - server_args = list(histogram_var = histogram_var), datanames = "all" ) } @@ -176,19 +178,8 @@ An example `teal` application using this module is shown below: library(teal) app <- init( - data = teal_data( - IRIS = iris, - code = "IRIS <- iris" - ), - modules = tm_histogram_example( - label = "Simple Module", - histogram_var = data_extract_spec( - dataname = "IRIS", - select = select_spec( - choices = c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width") - ) - ) - ), + data = teal_data(IRIS = iris, NPK = npk), + modules = tm_histogram_example(label = "Histogram Module"), header = "Simple app with custom histogram module" ) @@ -199,7 +190,11 @@ if (interactive()) { ## `shiny` input cycle -When `teal` modules are run inside the `init` the initial shiny input cycle is empty for each of them. In practice, this means that some inputs might be initialized with `NULL` value, unnecessary triggering some observers. A developer has to be aware of this situation as often it will require `shiny::req` or `ignoreInit` argument in observers or `reactive` expressions. This side effect is caused by the `shiny::insertUI` function. We are aware of this inconvenience and have already started to look for a solution. +When `teal` modules are run inside the `init` the initial shiny input cycle is empty for each of them. +In practice, this means that some inputs might be initialized with `NULL` value, unnecessary triggering some observers. +A developer has to be aware of this situation as often it will require `shiny::req` or `ignoreInit` argument in observers or `reactive` expressions. +This side effect is caused by the `shiny::insertUI` function. +We are aware of this inconvenience and have already started to look for a solution. ## Adding reporting to a module Refer to `vignette("adding_support_for_reporting")` to read about adding support for reporting in your `teal` module. From 4842338b9cc7d657d8beebdc09c3601555b5514c Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 12:32:29 +0000 Subject: [PATCH 17/36] [skip actions] Restyle files --- vignettes/creating-custom-modules.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vignettes/creating-custom-modules.Rmd b/vignettes/creating-custom-modules.Rmd index aa20118191..5b0ce85f67 100644 --- a/vignettes/creating-custom-modules.Rmd +++ b/vignettes/creating-custom-modules.Rmd @@ -138,8 +138,8 @@ srv_histogram_example <- function(id, data) { # evaluate plotting expression within data # inject input values into plotting expression within( - data(), - p <- hist(dataset[, selected], las = 1), + data(), + p <- hist(dataset[, selected], las = 1), dataset = as.name(dataset()), selected = selected() ) }) From 51d2ebfde6cda66835339c3c795d0a817a33509a Mon Sep 17 00:00:00 2001 From: Aleksander Chlebowski <114988527+chlebowa@users.noreply.github.com> Date: Thu, 30 Nov 2023 14:47:35 +0100 Subject: [PATCH 18/36] update example modules in vignettes (#993) adapted example modules to follow `example_module` --- vignettes/adding-support-for-reporting.Rmd | 50 +++++++++++++--------- vignettes/creating-custom-modules.Rmd | 36 ++++++++-------- vignettes/data-as-shiny-module.Rmd | 2 +- 3 files changed, 49 insertions(+), 39 deletions(-) diff --git a/vignettes/adding-support-for-reporting.Rmd b/vignettes/adding-support-for-reporting.Rmd index 41569615bf..7813791101 100644 --- a/vignettes/adding-support-for-reporting.Rmd +++ b/vignettes/adding-support-for-reporting.Rmd @@ -31,19 +31,21 @@ The entire life cycle of objects involved in creating the report and configuring Let us consider an example module, based on the example module from `teal`: ```{r, message=FALSE} library(teal) -teal_example_module <- function(label = "example teal module") { +example_module <- function(label = "example teal module") { module( label, server = function(id, data) { moduleServer(id, function(input, output, session) { + ns <- session$ns + updateSelectInput(session, "dataname", choices = isolate(datanames(data()))) output$text <- renderPrint(data()[[input$dataname]]) }) }, - ui = function(id, data) { + ui = function(id) { ns <- NS(id) teal.widgets::standard_layout( output = verbatimTextOutput(ns("text")), - encoding = selectInput(ns("dataname"), "Choose a dataset", choices = datanames(data)) + encoding = selectInput(ns("dataname"), "Choose a dataset", choices = NULL) ) }, datanames = "all" @@ -56,7 +58,7 @@ Using `teal`, you can launch this example module with the following: ```{r, eval = FALSE} app <- init( data = teal_data(IRIS = iris, MTCARS = mtcars), - modules = teal_example_module() + modules = example_module() ) if (interactive()) shinyApp(app$ui, app$server) @@ -76,14 +78,16 @@ example_module_with_reporting <- function(label = "example teal module") { label, server = function(id, data, reporter) { moduleServer(id, function(input, output, session) { + ns <- session$ns + updateSelectInput(session, "dataname", choices = isolate(datanames(data()))) output$text <- renderPrint(data()[[input$dataname]]) }) }, - ui = function(id, data) { + ui = function(id) { ns <- NS(id) teal.widgets::standard_layout( output = verbatimTextOutput(ns("text")), - encoding = selectInput(ns("dataname"), "Choose a dataset", choices = datanames(data)) + encoding = selectInput(ns("dataname"), "Choose a dataset", choices = NULL) ) }, datanames = "all" @@ -121,17 +125,19 @@ example_module_with_reporting <- function(label = "example teal module") { reporter = reporter, card_fun = function(card) card ) + ns <- session$ns + updateSelectInput(session, "dataname", choices = isolate(datanames(data()))) output$text <- renderPrint(data()[[input$dataname]]) }) }, - ui = function(id, data) { + ui = function(id) { ns <- NS(id) teal.widgets::standard_layout( output = tagList( teal.reporter::simple_reporter_ui(ns("reporter")), verbatimTextOutput(ns("text")) ), - encoding = selectInput(ns("dataname"), "Choose a dataset", choices = datanames(data)) + encoding = selectInput(ns("dataname"), "Choose a dataset", choices = NULL) ) }, datanames = "all" @@ -180,17 +186,19 @@ example_module_with_reporting <- function(label = "example teal module") { reporter = reporter, card_fun = custom_function ) + ns <- session$ns + updateSelectInput(session, "dataname", choices = isolate(datanames(data()))) output$text <- renderPrint(data()[[input$dataname]]) }) }, - ui = function(id, data) { + ui = function(id) { ns <- NS(id) teal.widgets::standard_layout( output = tagList( teal.reporter::simple_reporter_ui(ns("reporter")), verbatimTextOutput(ns("text")) ), - encoding = selectInput(ns("dataname"), "Choose a dataset", choices = datanames(data)) + encoding = selectInput(ns("dataname"), "Choose a dataset", choices = NULL) ) }, datanames = "all" @@ -250,12 +258,16 @@ example_reporter_module <- function(label = "Example") { server = function(id, data, reporter, filter_panel_api) { with_filter <- !missing(filter_panel_api) && inherits(filter_panel_api, "FilterPanelApi") moduleServer(id, function(input, output, session) { + ns <- session$ns + updateSelectInput(session, "dataname", choices = isolate(datanames(data()))) dat <- reactive(data()[[input$dataname]]) - output$nrow_ui <- renderUI({ - sliderInput(session$ns("nrow"), "Number of rows:", 1, nrow(dat()), 10) + observe({ + req(dat()) + updateSliderInput(session, "nrow", max = nrow(dat()), value = floor(nrow(dat()) / 5)) }) table_q <- reactive({ + req(input$dataname) req(input$nrow) within( data(), @@ -304,7 +316,7 @@ example_reporter_module <- function(label = "Example") { ### }) }, - ui = function(id, data) { + ui = function(id) { ns <- NS(id) teal.widgets::standard_layout( output = tableOutput(ns("table")), @@ -314,8 +326,8 @@ example_reporter_module <- function(label = "Example") { teal.reporter::download_report_button_ui(ns("downloadButton")), teal.reporter::reset_report_button_ui(ns("resetButton")) ), - selectInput(ns("dataname"), "Choose a dataset", choices = datanames(data)), - uiOutput(ns("nrow_ui")) + selectInput(ns("dataname"), "Choose a dataset", choices = NULL), + sliderInput(ns("nrow"), "Number of rows", min = 1, max = 1, value = 1, step = 1) ) ) }, @@ -324,16 +336,12 @@ example_reporter_module <- function(label = "Example") { } app <- init( - data = teal_data( - AIR = airquality, - IRIS = iris, - code = expression(AIR <- airquality, IRIS <- iris) - ), + data = teal_data(AIR = airquality, IRIS = iris), modules = list( example_reporter_module(label = "with Reporter"), example_module(label = "without Reporter") ), - filter = teal_slices(teal_slice(dataname = "AIR", varname = "Month", selected = c(5, 5))), + filter = teal_slices(teal_slice(dataname = "AIR", varname = "Temp", selected = c(72, 85))), header = "Example teal app with reporter" ) diff --git a/vignettes/creating-custom-modules.Rmd b/vignettes/creating-custom-modules.Rmd index 5b0ce85f67..67fc3badde 100644 --- a/vignettes/creating-custom-modules.Rmd +++ b/vignettes/creating-custom-modules.Rmd @@ -25,14 +25,16 @@ example_module <- function(label = "example teal module") { checkmate::assert_class(data, "reactive") checkmate::assert_class(isolate(data()), "teal_data") moduleServer(id, function(input, output, session) { + ns <- session$ns + updateSelectInput(session, "dataname", choices = isolate(datanames(data()))) output$text <- renderPrint(data()[[input$dataname]]) }) }, - ui = function(id, data) { + ui = function(id) { ns <- NS(id) teal.widgets::standard_layout( output = verbatimTextOutput(ns("text")), - encoding = selectInput(ns("dataname"), "Choose a dataset", choices = datanames(data)) + encoding = selectInput(ns("dataname"), "Choose a dataset", choices = NULL) ) }, datanames = "all" @@ -59,12 +61,14 @@ including an encoding panel on the left and main output covering the rest of the This function contains the shiny server logic for the module and should be of the form: -``` -function(id, - data, # optional, use if you want your module to access the application data - filter_panel_api, # optional, use if you want access to the filter panel from your module see teal.slice - reporter, # optional, use if your module supports reporting, see reporting vignette in teal - ...) { +```{r, eval=FALSE} +function( + id, + data, # optional; use if module needs access application data + filter_panel_api, # optional; use if module needs access to filter panel; see teal.slice + reporter, # optional; use if module supports reporting; see reporting vignette + ... +) { moduleServer(id, function(input, output, session) { # module code here }) @@ -97,8 +101,8 @@ ui_histogram_example <- function(id) { teal.widgets::standard_layout( output = plotOutput(ns("plot")), encoding = div( - uiOutput(ns("datasets")), - uiOutput(ns("numerics")) + selectInput(ns("datasets"), "select dataset", choices = NULL), + selectInput(ns("numerics"), "select numeric variable", choices = NULL) ), # we have a show R code button to show the code needed # to generate the histogram @@ -116,17 +120,15 @@ srv_histogram_example <- function(id, data) { moduleServer(id, function(input, output, session) { ns <- session$ns - # present dataset and variable choices + # update dataset and variable choices # each selection stored in separate reactive expression - output$datasets <- renderUI({ - selectInput(ns("datasets"), "select dataset", datanames(data())) - }) - dataset <- reactive(input$datasets) - output$numerics <- renderUI({ + updateSelectInput(session, "datasets", "select dataset", choices = isolate(datanames(data()))) + observe({ req(dataset()) nums <- vapply(data()[[dataset()]], is.numeric, logical(1L)) - selectInput(ns("numerics"), "select numeric variable", names(nums[nums])) + updateSelectInput(session, "numerics", "select numeric variable", choices = names(nums[nums])) }) + dataset <- reactive(input$datasets) selected <- reactive(input$numerics) # add plot code diff --git a/vignettes/data-as-shiny-module.Rmd b/vignettes/data-as-shiny-module.Rmd index 66ae5cb9e1..14b50dfc40 100644 --- a/vignettes/data-as-shiny-module.Rmd +++ b/vignettes/data-as-shiny-module.Rmd @@ -67,7 +67,7 @@ if (interactive()) { ``` -## Modification Data In-App +## Modification of Data In-App Another reason to postpone data operations is to allow the application user to act the preprocessing stage. An initial, constant form of the data can be created in the global environment and then modified once the app starts. From b0fc5d9652eb2fc4d94b240b9030bbab99e9edac Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 13:49:48 +0000 Subject: [PATCH 19/36] [skip actions] Restyle files --- vignettes/creating-custom-modules.Rmd | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/vignettes/creating-custom-modules.Rmd b/vignettes/creating-custom-modules.Rmd index 67fc3badde..47b7a97cb5 100644 --- a/vignettes/creating-custom-modules.Rmd +++ b/vignettes/creating-custom-modules.Rmd @@ -64,16 +64,14 @@ This function contains the shiny server logic for the module and should be of th ```{r, eval=FALSE} function( id, - data, # optional; use if module needs access application data - filter_panel_api, # optional; use if module needs access to filter panel; see teal.slice - reporter, # optional; use if module supports reporting; see reporting vignette - ... -) { + data, # optional; use if module needs access application data + filter_panel_api, # optional; use if module needs access to filter panel; see teal.slice + reporter, # optional; use if module supports reporting; see reporting vignette + ...) { moduleServer(id, function(input, output, session) { # module code here }) } - ``` When used inside a `teal` application called with `init`, the `data` argument is a named list of reactive `data.frame`s containing the data after having been filtered through the filter panel. From b06a96a8e7fe4cc4e13e7c40bd659f9cb0e770c2 Mon Sep 17 00:00:00 2001 From: Aleksander Chlebowski Date: Thu, 30 Nov 2023 14:51:51 +0100 Subject: [PATCH 20/36] trigger From 77ade74e1192c1c7a71ceb36ac71665e56616ba0 Mon Sep 17 00:00:00 2001 From: Aleksander Chlebowski Date: Thu, 30 Nov 2023 15:01:58 +0100 Subject: [PATCH 21/36] fix checks --- inst/WORDLIST | 22 +++++++++---------- .../including-data-in-teal-applications.Rmd | 6 ++--- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/inst/WORDLIST b/inst/WORDLIST index a460fdae39..199ce67108 100644 --- a/inst/WORDLIST +++ b/inst/WORDLIST @@ -1,24 +1,18 @@ ADaM -CDISC -DDL -Forkers -Hoffmann -MultiAssayExperiment -Pre -Reproducibility -TLG -Theming -UI -UIs -UX analysing +CDISC cloneable customizable +DDL dropdown +Forkers funder +Hoffmann +MAE omics pharmaverse pre +Pre preprocessed programmatically qenv @@ -27,4 +21,8 @@ reproducibility summarization tabsetted themer +theming +TLG +UI uncheck +UX diff --git a/vignettes/including-data-in-teal-applications.Rmd b/vignettes/including-data-in-teal-applications.Rmd index 88f25a876c..86bc7c281f 100644 --- a/vignettes/including-data-in-teal-applications.Rmd +++ b/vignettes/including-data-in-teal-applications.Rmd @@ -183,7 +183,7 @@ datanames(data_with_code) All `teal` modules take a `datanames` argument that determines which datasets they are to have access to. Only objects enumerated in the `datanames` property of the `teal_data` object can be used. -For a detailed explanation of datanames, see [this `teal.data` vignette](https://insightsengineering.github.io/teal.data/latest-tag/articles/teal-data.html). +For a detailed explanation of `datanames`, see [this `teal.data` vignette](https://insightsengineering.github.io/teal.data/latest-tag/articles/teal-data.html). [(back to General Data)](#general-data) @@ -230,8 +230,8 @@ data_with_code data_with_objects_and_code <- teal_data(iris = iris, cars = mtcars, code = expression(iris <- iris, cars <- mtcars)) data_with_objects_and_code -data_with_objects_and_code_verified <- verify(data_with_objects_and_code) -data_with_objects_and_code_verified +data_with_objects_and_code_ver <- verify(data_with_objects_and_code) +data_with_objects_and_code_ver ``` From 8c795317de00bd364744c7844a73105b4c00895c Mon Sep 17 00:00:00 2001 From: Aleksander Chlebowski <114988527+chlebowa@users.noreply.github.com> Date: Thu, 30 Nov 2023 15:06:09 +0100 Subject: [PATCH 22/36] tweak NEWS Signed-off-by: Aleksander Chlebowski <114988527+chlebowa@users.noreply.github.com> --- NEWS.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/NEWS.md b/NEWS.md index f47c5bde49..5c1a8765dd 100644 --- a/NEWS.md +++ b/NEWS.md @@ -9,9 +9,9 @@ ### Breaking changes -* `tdata` has been deprecated and replaced with `teal_data`. Support for `tdata` as `data` argument in the `module(server)` will be removed in the next release. -* `module(ui)` argument no longer accepts `data` and `datasets` arguments. Data dependent logic should be set in the `server` function. -* `module(server)` argument deprecated a `datasets` argument. `teal_module`'s `server` should accept `data` (`teal_data`) instead. +* `tdata` has been deprecated and replaced with `teal_data`. Support for `tdata` passed to the `data` argument in `module(server)` will be removed in the next release. +* `module(ui)` argument no longer accepts `data` and `datasets` arguments. All data dependent logic should be set in the `server` function. +* `module(server)` argument deprecated `datasets` argument. `teal_module`s' `server` functions should accept `data` (`teal_data`) instead. ### Miscellaneous From 3d7692fefdb6cc937ef2c3f5d85da78b075d5d2b Mon Sep 17 00:00:00 2001 From: Aleksander Chlebowski <114988527+chlebowa@users.noreply.github.com> Date: Thu, 30 Nov 2023 15:10:34 +0100 Subject: [PATCH 23/36] modify error message Signed-off-by: Aleksander Chlebowski <114988527+chlebowa@users.noreply.github.com> --- R/modules.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/modules.R b/R/modules.R index abc1141ab4..1d1d8ccddf 100644 --- a/R/modules.R +++ b/R/modules.R @@ -314,7 +314,7 @@ module <- function(label = "module", stop( sprintf("Called from module(label = \"%s\", ...)\n ", label), "`ui` with `data` or `datasets` argument is no longer accepted.\n ", - "If some `ui` inputs depend on data please fix your `server` instead.\n ", + "If some `ui` inputs depend on data, please move the logic to your `server` instead.\n ", "Possible solutions are renderUI() or updateXyzInput() functions.", ) } From e95ba8fb85e2dbcc7483aae1b427b06534a59559 Mon Sep 17 00:00:00 2001 From: kartikeya kirar Date: Fri, 1 Dec 2023 14:22:57 +0530 Subject: [PATCH 24/36] removed additional line break from code. (#989) this fixes https://github.com/insightsengineering/teal.gallery/issues/113 --------- Signed-off-by: kartikeya kirar Co-authored-by: Aleksander Chlebowski <114988527+chlebowa@users.noreply.github.com> --- R/get_rcode_utils.R | 43 ++++++++++++++++++++-------------------- R/module_nested_tabs.R | 3 +-- man/get_datasets_code.Rd | 4 ++-- 3 files changed, 24 insertions(+), 26 deletions(-) diff --git a/R/get_rcode_utils.R b/R/get_rcode_utils.R index e53bb9918a..5954a78c40 100644 --- a/R/get_rcode_utils.R +++ b/R/get_rcode_utils.R @@ -38,39 +38,38 @@ get_rcode_str_install <- function() { #' @param datasets (`FilteredData`) object #' @param hashes named (`list`) of hashes per dataset #' -#' @return `character(3)` containing the following elements: +#' @return Character string concatenated from the following elements: #' - data pre-processing code (from `data` argument in `init`) #' - hash check of loaded objects -#' - filter code +#' - filter code (if any) #' #' @keywords internal get_datasets_code <- function(datanames, datasets, hashes) { + # preprocessing code str_prepro <- teal.data:::get_code_dependency(attr(datasets, "preprocessing_code"), names = datanames) if (length(str_prepro) == 0) { str_prepro <- "message('Preprocessing is empty')" - } else if (length(str_prepro) > 0) { - str_prepro <- paste0(str_prepro, "\n\n") + } else { + str_prepro <- paste(str_prepro, collapse = "\n") } - str_hash <- paste( - paste0( - vapply( - datanames, - function(dataname) { - sprintf( - "stopifnot(%s == %s)", - deparse1(bquote(rlang::hash(.(as.name(dataname))))), - deparse1(hashes[[dataname]]) - ) - }, - character(1) - ), - collapse = "\n" - ), - "\n\n" - ) + # hash checks + str_hash <- vapply(datanames, function(dataname) { + sprintf( + "stopifnot(%s == %s)", + deparse1(bquote(rlang::hash(.(as.name(dataname))))), + deparse1(hashes[[dataname]]) + ) + }, character(1)) + str_hash <- paste(str_hash, collapse = "\n") + # filter expressions str_filter <- teal.slice::get_filter_expr(datasets, datanames) + if (str_filter == "") { + str_filter <- character(0) + } - c(str_prepro, str_hash, str_filter) + # concatenate all code + str_code <- paste(c(str_prepro, str_hash, str_filter), collapse = "\n\n") + sprintf("%s\n", str_code) } diff --git a/R/module_nested_tabs.R b/R/module_nested_tabs.R index 471f25830b..c1e7229d15 100644 --- a/R/module_nested_tabs.R +++ b/R/module_nested_tabs.R @@ -290,8 +290,7 @@ srv_nested_tabs.teal_module <- function(id, datasets, modules, is_module_specifi code <- c( get_rcode_str_install(), get_rcode_libraries(), - get_datasets_code(datanames, datasets, hashes), - teal.slice::get_filter_expr(datasets, datanames) + get_datasets_code(datanames, datasets, hashes) ) do.call( diff --git a/man/get_datasets_code.Rd b/man/get_datasets_code.Rd index f7256b8340..b68839cef8 100644 --- a/man/get_datasets_code.Rd +++ b/man/get_datasets_code.Rd @@ -14,11 +14,11 @@ get_datasets_code(datanames, datasets, hashes) \item{hashes}{named (\code{list}) of hashes per dataset} } \value{ -\code{character(3)} containing the following elements: +Character string concatenated from the following elements: \itemize{ \item data pre-processing code (from \code{data} argument in \code{init}) \item hash check of loaded objects -\item filter code +\item filter code (if any) } } \description{ From f424cd4cb4cc8ce6b785334a40cb1d67f8eb858e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 1 Dec 2023 10:55:50 +0100 Subject: [PATCH 25/36] Update R/modules.R MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vedha Viyash <49812166+vedhav@users.noreply.github.com> Signed-off-by: André Veríssimo <211358+averissimo@users.noreply.github.com> --- R/modules.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/modules.R b/R/modules.R index 1d1d8ccddf..dd22288762 100644 --- a/R/modules.R +++ b/R/modules.R @@ -315,7 +315,7 @@ module <- function(label = "module", sprintf("Called from module(label = \"%s\", ...)\n ", label), "`ui` with `data` or `datasets` argument is no longer accepted.\n ", "If some `ui` inputs depend on data, please move the logic to your `server` instead.\n ", - "Possible solutions are renderUI() or updateXyzInput() functions.", + "Possible solutions are renderUI() or updateXyzInput() functions." ) } From 5000351f8640b49858c29d110e04a2134258f561 Mon Sep 17 00:00:00 2001 From: go_gonzo Date: Mon, 4 Dec 2023 08:52:49 +0100 Subject: [PATCH 26/36] fix unnecessary conversion from teal_data_module to teal_data --- R/init.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/init.R b/R/init.R index 80ca7eb912..685f42e0d0 100644 --- a/R/init.R +++ b/R/init.R @@ -102,7 +102,7 @@ init <- function(data, footer = tags$p(), id = character(0)) { logger::log_trace("init initializing teal app with: data ({ class(data)[1] }).") - if (is.list(data)) { + if (is.list(data) && !inherits(data, "teal_data_module")) { checkmate::assert_list(data, names = "named") data <- do.call(teal.data::teal_data, data) } From e01b322c4b9dfd8011b813e33be5733d00562bef Mon Sep 17 00:00:00 2001 From: go_gonzo Date: Wed, 6 Dec 2023 11:07:19 +0100 Subject: [PATCH 27/36] remove remaining TealData artefacts --- R/init.R | 6 ------ 1 file changed, 6 deletions(-) diff --git a/R/init.R b/R/init.R index 685f42e0d0..bf7b82dc8a 100644 --- a/R/init.R +++ b/R/init.R @@ -149,12 +149,6 @@ init <- function(data, as.list(hashables$data@env) } else if (inherits(data, "teal_data_module")) { body(data$server) - } else if (hashables$data$is_pulled()) { - sapply(get_dataname(hashables$data), simplify = FALSE, function(dn) { - hashables$data$get_dataset(dn)$get_raw_data() - }) - } else { - hashables$data$get_code() } attr(filter, "app_id") <- rlang::hash(hashables) From 17384b230470a5be5d54bd7b5a69c08da98f60f6 Mon Sep 17 00:00:00 2001 From: "27856297+dependabot-preview[bot]@users.noreply.github.com" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Wed, 6 Dec 2023 10:10:59 +0000 Subject: [PATCH 28/36] [skip actions] Roxygen Man Pages Auto Update --- man/eval_code.Rd | 2 +- man/within.teal_data_module.Rd | 26 +++++++++++++++++++------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/man/eval_code.Rd b/man/eval_code.Rd index 22a67e4570..fd2ab5ffe3 100644 --- a/man/eval_code.Rd +++ b/man/eval_code.Rd @@ -16,7 +16,7 @@ \arguments{ \item{object}{(\code{teal_data_module})} -\item{code}{(\code{character} or \code{language}) code to evaluate. Also accepts and stores comments} +\item{code}{(\code{character} or \code{language}) code to evaluate. If \code{character}, comments are retained.} } \value{ Returns a \code{teal_data_module} object. diff --git a/man/within.teal_data_module.Rd b/man/within.teal_data_module.Rd index 8b39b09457..98e7a4087f 100644 --- a/man/within.teal_data_module.Rd +++ b/man/within.teal_data_module.Rd @@ -2,16 +2,16 @@ % Please edit documentation in R/teal_data_module-eval_code.R \name{within.teal_data_module} \alias{within.teal_data_module} -\title{Evaluate expression in \code{qenv} object.} +\title{Code Tracking With \code{qenv} Object} \usage{ \method{within}{teal_data_module}(data, expr, ...) } \arguments{ \item{data}{(\code{teal_data_module}) object} -\item{expr}{\code{expression} to evaluate} +\item{expr}{(\code{expression}) to evaluate. Must be inline code, see \verb{Using language objects...}} -\item{...}{\code{name:value} pairs to inject values into \code{expr}} +\item{...}{see \code{Details}} } \value{ Returns a \code{teal_data_module} object with a delayed evaluation of \code{expr} @@ -22,10 +22,22 @@ Convenience function for evaluating inline code inside the environment of a \code{teal_data_module} } \details{ -This is a wrapper for \code{eval_code} that provides a simplified way of passing code for evaluation. -It accepts only inline expressions (both simple and compound) and allows for injecting values into \code{expr} -through the \code{...} argument: as \code{name:value} pairs are passed to \code{...}, -\code{name} in \code{expr} will be replaced with \code{value}. +\code{qenv()} instantiates a \code{qenv} with an empty environment. +Any changes must be made by evaluating code in it with \code{eval_code} or \code{within}, thereby ensuring reproducibility. + +\code{new_qenv()} (\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} and not recommended) +can instantiate a \code{qenv} object with data in the environment and code registered. + +\code{eval_code} evaluates given code in the \code{qenv} environment and appends it to the \code{code} slot. +Thus, if the \code{qenv} had been instantiated empty, contents of the environment are always a result of the stored code. + +\code{get_code} retrieves the code stored in the \code{qenv}. \code{...} passes arguments to methods. + +\code{within} is a convenience function for evaluating inline code inside the environment of a \code{qenv}. +It is a method for the \code{base} generic that wraps \code{eval_code} to provide a simplified way of passing code. +\code{within} accepts only inline expressions (both simple and compound) and allows for injecting values into \code{expr} +through the \code{...} argument: +as \code{name:value} pairs are passed to \code{...}, \code{name} in \code{expr} will be replaced with \code{value}. } \examples{ tdm <- teal_data_module( From 3be159f5b70c16727acf2c53a96c741f11a199a4 Mon Sep 17 00:00:00 2001 From: Aleksander Chlebowski <114988527+chlebowa@users.noreply.github.com> Date: Wed, 6 Dec 2023 14:58:49 +0100 Subject: [PATCH 29/36] remove leftover `tdata` mentions (#998) Changes `tdata` to `teal_data` in a few places we missed. --- R/module_nested_tabs.R | 6 +++--- R/modules.R | 2 +- R/modules_debugging.R | 7 ++++--- man/dot-datasets_to_data.Rd | 6 +++--- man/filter_calls_module.Rd | 2 +- man/module.Rd | 2 +- 6 files changed, 13 insertions(+), 12 deletions(-) diff --git a/R/module_nested_tabs.R b/R/module_nested_tabs.R index c1e7229d15..7a0e4a9c93 100644 --- a/R/module_nested_tabs.R +++ b/R/module_nested_tabs.R @@ -261,15 +261,15 @@ srv_nested_tabs.teal_module <- function(id, datasets, modules, is_module_specifi }) } -#' Convert `FilteredData` to reactive list of datasets of the `tdata` type. +#' Convert `FilteredData` to reactive list of datasets of the `teal_data` type. #' -#' Converts `FilteredData` object to `tdata` object containing datasets needed for a specific module. +#' Converts `FilteredData` object to `teal_data` object containing datasets needed for a specific module. #' Please note that if module needs dataset which has a parent, then parent will be also returned. #' A hash per `dataset` is calculated internally and returned in the code. #' #' @param module (`teal_module`) module where needed filters are taken from #' @param datasets (`FilteredData`) object where needed data are taken from -#' @return A `tdata` object. +#' @return A `teal_data` object. #' #' @keywords internal .datasets_to_data <- function(module, datasets) { diff --git a/R/modules.R b/R/modules.R index dd22288762..f243bb6120 100644 --- a/R/modules.R +++ b/R/modules.R @@ -171,7 +171,7 @@ is_arg_used <- function(modules, arg) { #' @param server (`function`) `shiny` module with following arguments: #' - `id` - teal will set proper shiny namespace for this module (see [shiny::moduleServer()]). #' - `input`, `output`, `session` - (not recommended) then [shiny::callModule()] will be used to call a module. -#' - `data` (optional) module will receive a `tdata` object, a list of reactive (filtered) data specified in +#' - `data` (optional) module will receive a `teal_data` object, a list of reactive (filtered) data specified in #' the `filters` argument. #' - `datasets` (optional) module will receive `FilteredData`. (See `[teal.slice::FilteredData]`). #' - `reporter` (optional) module will receive `Reporter`. (See [teal.reporter::Reporter]). diff --git a/R/modules_debugging.R b/R/modules_debugging.R index 66be4e121b..bb7167c5d3 100644 --- a/R/modules_debugging.R +++ b/R/modules_debugging.R @@ -14,7 +14,7 @@ #' #' @examples #' app <- init( -#' data = list(iris = iris, mtcars = mtcars), +#' data = teal_data(iris = iris, mtcars = mtcars), #' modules = teal:::filter_calls_module(), #' header = "Simple teal app" #' ) @@ -27,10 +27,11 @@ filter_calls_module <- function(label = "Filter Calls Module") { # nolint module( label = label, server = function(input, output, session, data) { - checkmate::assert_class(data, "tdata") + checkmate::assert_class(data, "reactive") + checkmate::assert_class(isolate(data()), "teal_data") output$filter_calls <- renderText({ - get_code_tdata(data) + teal.data::get_code(data()) }) }, ui = function(id, ...) { diff --git a/man/dot-datasets_to_data.Rd b/man/dot-datasets_to_data.Rd index 292a23d7c4..1789e9bd71 100644 --- a/man/dot-datasets_to_data.Rd +++ b/man/dot-datasets_to_data.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/module_nested_tabs.R \name{.datasets_to_data} \alias{.datasets_to_data} -\title{Convert \code{FilteredData} to reactive list of datasets of the \code{tdata} type.} +\title{Convert \code{FilteredData} to reactive list of datasets of the \code{teal_data} type.} \usage{ .datasets_to_data(module, datasets) } @@ -12,10 +12,10 @@ \item{datasets}{(\code{FilteredData}) object where needed data are taken from} } \value{ -A \code{tdata} object. +A \code{teal_data} object. } \description{ -Converts \code{FilteredData} object to \code{tdata} object containing datasets needed for a specific module. +Converts \code{FilteredData} object to \code{teal_data} object containing datasets needed for a specific module. Please note that if module needs dataset which has a parent, then parent will be also returned. A hash per \code{dataset} is calculated internally and returned in the code. } diff --git a/man/filter_calls_module.Rd b/man/filter_calls_module.Rd index f7c7cde320..53bf4b6faf 100644 --- a/man/filter_calls_module.Rd +++ b/man/filter_calls_module.Rd @@ -16,7 +16,7 @@ and avoids session restarts! } \examples{ app <- init( - data = list(iris = iris, mtcars = mtcars), + data = teal_data(iris = iris, mtcars = mtcars), modules = teal:::filter_calls_module(), header = "Simple teal app" ) diff --git a/man/module.Rd b/man/module.Rd index b945a69328..e40022d00e 100644 --- a/man/module.Rd +++ b/man/module.Rd @@ -35,7 +35,7 @@ module( \itemize{ \item \code{id} - teal will set proper shiny namespace for this module (see \code{\link[shiny:moduleServer]{shiny::moduleServer()}}). \item \code{input}, \code{output}, \code{session} - (not recommended) then \code{\link[shiny:callModule]{shiny::callModule()}} will be used to call a module. -\item \code{data} (optional) module will receive a \code{tdata} object, a list of reactive (filtered) data specified in +\item \code{data} (optional) module will receive a \code{teal_data} object, a list of reactive (filtered) data specified in the \code{filters} argument. \item \code{datasets} (optional) module will receive \code{FilteredData}. (See \verb{[teal.slice::FilteredData]}). \item \code{reporter} (optional) module will receive \code{Reporter}. (See \link[teal.reporter:Reporter]{teal.reporter::Reporter}). From 9f8cbb90328655541737e6969b7875e5d6c9cfc8 Mon Sep 17 00:00:00 2001 From: go_gonzo Date: Thu, 7 Dec 2023 09:27:00 +0100 Subject: [PATCH 30/36] remove unnecessary packages --- DESCRIPTION | 6 ++---- vignettes/data-as-shiny-module.Rmd | 5 ----- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 049ca349a9..8f050d1fa3 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -51,8 +51,6 @@ Imports: utils Suggests: bslib, - covr, - dplyr (>= 1.0.5), knitr (>= 1.42), MultiAssayExperiment, R6, @@ -70,8 +68,8 @@ Config/Needs/verdepcheck: rstudio/shiny, insightsengineering/teal.data, mllg/checkmate, jeroen/jsonlite, r-lib/lifecycle, daroczig/logger, tidyverse/magrittr, r-lib/rlang, daattali/shinyjs, insightsengineering/teal.logger, insightsengineering/teal.reporter, - insightsengineering/teal.widgets, rstudio/bslib, r-lib/covr, - tidyverse/dplyr, yihui/knitr, bioc::MultiAssayExperiment, r-lib/R6, + insightsengineering/teal.widgets, rstudio/bslib, + yihui/knitr, bioc::MultiAssayExperiment, r-lib/R6, rstudio/rmarkdown, rstudio/shinyvalidate, insightsengineering/teal.code, r-lib/testthat, r-lib/withr, yaml=vubiostat/r-yaml diff --git a/vignettes/data-as-shiny-module.Rmd b/vignettes/data-as-shiny-module.Rmd index 4a5d9a87e2..5ed80e2137 100644 --- a/vignettes/data-as-shiny-module.Rmd +++ b/vignettes/data-as-shiny-module.Rmd @@ -141,11 +141,6 @@ data_mod_2 <- within( dataset1$Ratio.Sepal.Petal.Width <- round(dataset1$Sepal.Width / dataset1$Petal.Width, digits = 2L) # Create new column that converts Miles per Galon to Liter per 100 Km dataset2$lp100km <- round(dataset2$mpg * 0.42514371, digits = 2L) - dataset2 <- dplyr::relocate( - dataset2, - "lp100km", - .after = "mpg" - ) } ) From 5a397d8dcb7a186edbe82dafb1fd556cf99fb1ef Mon Sep 17 00:00:00 2001 From: go_gonzo Date: Thu, 7 Dec 2023 10:18:00 +0100 Subject: [PATCH 31/36] shorten example --- R/dummy_functions.R | 5 +---- man/example_module.Rd | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/R/dummy_functions.R b/R/dummy_functions.R index f8a6c99e70..8f1f2d3d5d 100644 --- a/R/dummy_functions.R +++ b/R/dummy_functions.R @@ -78,10 +78,7 @@ example_datasets <- function() { # nolint #' @return A `teal` module which can be included in the `modules` argument to [teal::init()]. #' @examples #' app <- init( -#' data = teal_data( -#' IRIS = iris, -#' MTCARS = mtcars -#' ), +#' data = teal_data(IRIS = iris, MTCARS = mtcars), #' modules = example_module() #' ) #' if (interactive()) { diff --git a/man/example_module.Rd b/man/example_module.Rd index a0291c9c63..130acb0f11 100644 --- a/man/example_module.Rd +++ b/man/example_module.Rd @@ -24,10 +24,7 @@ A \code{teal} module which can be included in the \code{modules} argument to \co } \examples{ app <- init( - data = teal_data( - IRIS = iris, - MTCARS = mtcars - ), + data = teal_data(IRIS = iris, MTCARS = mtcars), modules = example_module() ) if (interactive()) { From cb7a88f27b0b4736ddf84b3954d5f2f3b10278e2 Mon Sep 17 00:00:00 2001 From: Aleksander Chlebowski <114988527+chlebowa@users.noreply.github.com> Date: Thu, 7 Dec 2023 11:35:02 +0100 Subject: [PATCH 32/36] 984 refactor blueprint (#997) Fixes #984 --- _pkgdown.yml | 16 ++--- vignettes/adding-support-for-reporting.Rmd | 4 +- vignettes/blueprint/actors.Rmd | 6 +- vignettes/blueprint/dataflow.Rmd | 9 ++- vignettes/blueprint/ddl.Rmd | 47 ------------- vignettes/blueprint/filter_panel.Rmd | 2 +- vignettes/blueprint/in_app_data.Rmd | 26 +++++++ vignettes/blueprint/input_data.Rmd | 65 ++++++++++++++++++ vignettes/blueprint/intro.Rmd | 24 +++---- vignettes/blueprint/module_encapsulation.Rmd | 2 +- .../{products_map.Rmd => product_map.Rmd} | 6 +- vignettes/blueprint/qenv.Rmd | 61 ---------------- vignettes/blueprint/reporter.jpg | Bin 207761 -> 0 bytes vignettes/bootstrap-themes-in-teal.Rmd | 8 +-- vignettes/creating-custom-modules.Rmd | 2 +- vignettes/data-as-shiny-module.Rmd | 4 +- vignettes/filter-panel.Rmd | 2 +- vignettes/getting-started-with-teal.Rmd | 4 +- .../including-data-in-teal-applications.Rmd | 14 ++-- 19 files changed, 144 insertions(+), 158 deletions(-) delete mode 100644 vignettes/blueprint/ddl.Rmd create mode 100644 vignettes/blueprint/in_app_data.Rmd create mode 100644 vignettes/blueprint/input_data.Rmd rename vignettes/blueprint/{products_map.Rmd => product_map.Rmd} (93%) delete mode 100644 vignettes/blueprint/qenv.Rmd delete mode 100644 vignettes/blueprint/reporter.jpg diff --git a/_pkgdown.yml b/_pkgdown.yml index 3b9f2fe5d6..bbdbe9cc2e 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -28,15 +28,15 @@ navbar: - text: Data Flow href: articles/blueprint/dataflow.html - text: Product Map - href: articles/blueprint/products_map.html + href: articles/blueprint/product_map.html - text: Features navbar: Features - - text: "`qenv`" - href: articles/blueprint/qenv.html + - text: Input Data + href: articles/blueprint/input_data.html + - text: In-App Data + href: articles/blueprint/in_app_data.html - text: Filter Panel href: articles/blueprint/filter_panel.html - - text: Delayed Data Loading (DDL) - href: articles/blueprint/ddl.html - text: Module and Encapsulation href: articles/blueprint/module_encapsulation.html @@ -75,14 +75,14 @@ articles: - blueprint/intro - blueprint/actors - blueprint/dataflow - - blueprint/products_map + - blueprint/product_map - title: "" desc: > Features contents: - - blueprint/qenv + - blueprint/input_data + - blueprint/in_app_data - blueprint/filter_panel - - blueprint/ddl - blueprint/module_encapsulation diff --git a/vignettes/adding-support-for-reporting.Rmd b/vignettes/adding-support-for-reporting.Rmd index 7813791101..a4d305736c 100644 --- a/vignettes/adding-support-for-reporting.Rmd +++ b/vignettes/adding-support-for-reporting.Rmd @@ -26,7 +26,7 @@ The responsibilities of a module developer include: The entire life cycle of objects involved in creating the report and configuring the module to preview the report is handled by `teal`. -## Custom Module +## Custom module Let us consider an example module, based on the example module from `teal`: ```{r, message=FALSE} @@ -64,7 +64,7 @@ app <- init( if (interactive()) shinyApp(app$ui, app$server) ``` -## Add Support for Reporting +## Add support for reporting ### Modify the declaration of the server function diff --git a/vignettes/blueprint/actors.Rmd b/vignettes/blueprint/actors.Rmd index 3f73c3aa55..35bcce157b 100644 --- a/vignettes/blueprint/actors.Rmd +++ b/vignettes/blueprint/actors.Rmd @@ -13,7 +13,7 @@ There are two main actors in the `teal` development: * `teal` App Developer * `teal` Module Developer -## `teal` App Developer +## `teal` app developer ```{r, child="_setup.Rmd"} ``` @@ -44,7 +44,7 @@ When developing a `teal` app, the developer will select the most appropriate `te To learn more about the existing modules, visit [`teal.gallery`](https://insightsengineering.github.io/teal.gallery/) that contains several demo applications and their source code. -## `teal` Module Developer +## `teal` module developer ```{r actors_mermaid2, echo=FALSE} shiny::pre( @@ -75,7 +75,7 @@ Ultimately, one or more `teal` modules are employed to construct a `teal` app. To learn more about creating custom modules follow the [Tutorial on Creating a Custom Module](https://insightsengineering.github.io/teal/latest-tag/articles/creating-custom-modules.html). -## Workflow in a Clinical Trial Study +## Workflow in a clinical trial study ```{r actors_mermaid3, echo=FALSE} shiny::pre( diff --git a/vignettes/blueprint/dataflow.Rmd b/vignettes/blueprint/dataflow.Rmd index 496015a742..70eead1701 100644 --- a/vignettes/blueprint/dataflow.Rmd +++ b/vignettes/blueprint/dataflow.Rmd @@ -31,12 +31,15 @@ sequenceDiagram; The sequence diagram above illustrates the different stages that data goes through within the `teal` framework, supported by the `teal.slice` R package: -1. Data is loaded into the `teal` app; - - See the [Filter panel vignette](filter_panel.html) for details; +1. Data is created and loaded into `teal` app; + - Data sets are wrapped in a `teal_data` before being passed to the app; + - The [`teal_data` class](input_data.html) facilitates reproducibility; 2. Data is passed to the filter panel; - Users _(or app developers)_ can specify filters to apply; - Filters can be specified globally, for the whole app, or for specific modules; + - Filtering code is appended to the data; + - See the [Filter panel vignette](filter_panel.html) for details; 3. Filtered data is sent to `teal` modules for analysis; - - Each module creates a [`qenv`](qenv.html) object track the code that is be applied to the data _(and used for reproducibility)_; + - Each module receives a `teal_data` object so analysis code applied to the data is tracked _(and can be used to reproduce the whole analysis)_; Whenever filters are added or removed, the data coming into modules is re-computed, providing the `teal` module with new filtered data to conduct the required analysis. diff --git a/vignettes/blueprint/ddl.Rmd b/vignettes/blueprint/ddl.Rmd deleted file mode 100644 index bcf1767a3a..0000000000 --- a/vignettes/blueprint/ddl.Rmd +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: "Delayed Data Loading (DDL)" -author: "NEST CoreDev" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{Delayed Data Loading (DDL)} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -## Introduction - -The `teal` framework introduced the Delayed Data Loading mechanism to enhance the user experience while reading and loading data in the app. - -## Background - -Usually, when running a shiny app, the dataset must be immediately available in the session for processing and reading. However, if the data is stored externally (such as in a database or other data repository), loading the shiny app may be delayed because the data needs to be fetched first. -If there is additional data processing code, this may further extend the loading process. - -To address this, we created the Delayed Data Loading mechanism. Learn how to use it [here](https://insightsengineering.github.io/teal.data/latest-tag/articles/using-delayed-data-basic.html). - -## What is Delayed Data Loading? - -Delayed Data Loading is an R object managed in `teal.data`, which stores instructions on how to obtain the data, including how to read and process it before it is used in `teal`. -By adopting this approach, `teal` apps can load more quickly, and the data can be fetched after the app is loaded. - -## Splash Screen - -`teal` provides a comprehensive solution for managing the delayed data loading mechanism, which includes the incorporation of a splash screen. -The splash screen serves as a visual cue to the user that data is being loaded and that they should wait for the app to be ready. - -Moreover, the splash screen can be modified to query the user for a password or other access credentials needed to fetch the data. -In cases where the modified splash screen is used, `teal` will display the customized version to prompt the user for the necessary information. - -After the data is fetched and loaded, `teal` removes the splash screen and replaces it with the content of the corresponding `teal` modules. -`teal` also displays a notification indicating that the data has been loaded, and the app has fully started up. - -![Notification that the data is loaded and app is ready to use](../../reference/figures/notification.jpg) - -## Additional resources - -The vignettes on `teal.data` documentation provide with basic and advanced examples for this feature. - -- [Pre-processing Delayed Data](https://insightsengineering.github.io/teal.data/latest-tag/articles/preprocessing-delayed-data.html) -- [Using Delayed Data Loading (basic)](https://insightsengineering.github.io/teal.data/latest-tag/articles/using-delayed-data-basic.html) -- [Creating Delayed Data Classes (Advanced)](https://insightsengineering.github.io/teal.data/latest-tag/articles/using-delayed-data-advanced.html) -- [Testing Delayed Data Loading](https://insightsengineering.github.io/teal.data/latest-tag/articles/testing-delayed-data.html) diff --git a/vignettes/blueprint/filter_panel.Rmd b/vignettes/blueprint/filter_panel.Rmd index 2fb0691049..47a4126ef7 100644 --- a/vignettes/blueprint/filter_panel.Rmd +++ b/vignettes/blueprint/filter_panel.Rmd @@ -24,7 +24,7 @@ Moreover, users can activate or deactivate filter states interactively, either i
-## Filter Flow +## Filter flow ```{r, child="_setup.Rmd"} ``` diff --git a/vignettes/blueprint/in_app_data.Rmd b/vignettes/blueprint/in_app_data.Rmd new file mode 100644 index 0000000000..d6f6dcfab0 --- /dev/null +++ b/vignettes/blueprint/in_app_data.Rmd @@ -0,0 +1,26 @@ +--- +title: "In-App Data" +author: "NEST CoreDev" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{In-App Data} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +## Building data in the App + +Typically the data that is passed into a `teal` application is available before the app is run. +However, this is not always true and in some cases the data will be built only after the app has started. +A good example is pulling the data from an external repository, like a database, or uploading a file. +Additional authentication may be required. + +### `teal_data_module` + +Preprocessing actions can be performed in-app using the `teal_data_module`. +Rather than passing a `teal_data` object to the app, one may pass a _`shiny` module_ that _returns_ a `teal_data` object (wrapped in a reactive expression). +This allows the app developer to include user actions data creation, fetching, and even pre-filtering modification. + +## Further reading + +A complete explanation of using the `teal_data_module` can be found in [this `teal` vignette](https://insightsengineering.github.io/teal/latest-tag/articles/data-as-shiny-module.html) diff --git a/vignettes/blueprint/input_data.Rmd b/vignettes/blueprint/input_data.Rmd new file mode 100644 index 0000000000..cf602c4980 --- /dev/null +++ b/vignettes/blueprint/input_data.Rmd @@ -0,0 +1,65 @@ +--- +title: "Input Data" +author: "NEST CoreDev" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Input Data} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +## Introduction + +Reproducibility is paramount in the pharmaceutical industry. +Accurate and consistent results are essential to ensure high-quality research and the safety of patients. +By prioritizing reproducibility, researchers can validate their methods, confirm their findings, and contribute to the advancement of the field. + +The `teal.code` package provides the [`qenv` class](https://insightsengineering.github.io/teal.code/latest-tag/articles/qenv.html) that facilitates code reproducibility. +Code is passed to a `qenv` object, where is evaluated in a specific environment. +`qenv` also stores the code so that it can be retrieved on request. + +The `teal_data` class, which serves as the primary data interface for `teal` applications, inherits this code tracking behavior from `qenv`. + +## Preparing data for a `teal` application + +All `teal` applications run on data provided in a `teal_data` object. +Data objects are stored and modified within the environment of the `teal_data` object and all R code used is tracked, which allows for the code to be evaluated and executed in the `teal` application, and reproduced outside the `teal` application. +This includes data loading, preprocessing, filtering, transformations, and plotting, etc. + +The `teal_data` object makes it easy for users to reproduce and validate the results of their analyses. + +```{dot teal_data_dot_diagram, echo=FALSE} +digraph G { + teal_data [label = "teal_data"]; + node [shape=box]; + teal_modules [label = "teal modules analysis R code"]; + library [label = "R library() calls"]; + filter_states [label = "filter states R code"]; + data [label = "data preprocessing R code"]; + teal_modules -> teal_data; + library -> teal_data; + edge [dir="back"]; + teal_data -> filter_states; + teal_data -> data; +} +``` + +Learn more about the use of `teal_data` in the [`teal.data` package vignettes](https://insightsengineering.github.io/teal.data/latest-tag/articles). + +## `Show R Code` and `Reporter` + +In both the `teal.modules.clinical` and `teal.modules.general` R packages, you'll find that most modules include a convenient `Show R Code` button. +When this button is clicked, a modal window appears, revealing the R code responsible for generating the module's output. +This functionality is achieved by inspecting the `teal_data` object and retrieving code from it. +With the `Show R Code` button, users can easily copy and independently run the code to reproduce the analysis presented in the teal module. + +![Show R Code](../../man/figures/showrcode.jpg){width=50%} + +The Reporter feature also leverages the `teal_data` object in its operation. +Much like the `Show R Code` mechanism, the code displayed in a Reporter Card is extracted from the `teal_data` object. + +![Reporter](../../man/figures/reporter.jpg){width=50%} + +To learn more about the `Reporter` feature, please visit the [teal.reporter documentation](https://insightsengineering.github.io/teal.reporter/latest-tag/index.html). + +Overall, `qenv` from `teal.code` and its child class, `teal_data`, are powerful tools for ensuring code reproducibility and promoting high-quality research in the R programming language. diff --git a/vignettes/blueprint/intro.Rmd b/vignettes/blueprint/intro.Rmd index fe3eea200c..dba76cf04e 100644 --- a/vignettes/blueprint/intro.Rmd +++ b/vignettes/blueprint/intro.Rmd @@ -8,30 +8,30 @@ vignette: > %\VignetteEncoding{UTF-8} --- -`teal` is an interactive data exploration framework based on Shiny, designed with emphasis on analyzing CDISC clinical trial data. +`teal` is an interactive data exploration framework based on Shiny, designed primarily to analyze CDISC clinical trial data. A Shiny Application created with `teal` offers users the ability to: - Import data from external sources; - Dynamically filter data for analysis; -- Generate reproducible code for future analysis -- Create downloadable reports of analysis results _(for analysis modules that support reporting)_. +- Generate reproducible code for future analysis; +- Create and download reports of analysis results _(for analysis modules that support reporting)_. -Moreover, the `teal` framework provides application developers with a wide range of customizable standard analysis modules to integrate into their applications, along with a logging framework that helps facilitate debugging. +Moreover, the `teal` framework provides application developers with a wide range of customizable standard analysis modules to integrate into their applications, along with a logging framework that facilitates debugging. Additionally, advanced users of the framework can develop new analysis modules and easily integrate them into any `teal` application. The `teal` framework's functionality draws heavily from the following packages: | R package | Description | |----------------------|:------------------------------------------------------------------------| -|[`teal`](https://github.com/insightsengineering/teal) | `shiny`-based interactive exploration framework for analyzing data| -|[`teal.data`](https://github.com/insightsengineering/teal.data) | creating and loading the data needed for `teal` applications| -|[`teal.widgets`](https://github.com/insightsengineering/teal.widgets) | `shiny` UI components used within `teal`| -|[`teal.slice`](https://github.com/insightsengineering/teal.slice) | provides a filtering panel to allow filtering of data| -|[`teal.code`](https://github.com/insightsengineering/teal.code) | handles reproducibility of outputs| -|[`teal.transform`](https://github.com/insightsengineering/teal.transform) | standardizes extracting and merging data| -|[`teal.logger`](https://github.com/insightsengineering/teal.logger) | standardizes logging within `teal` framework| -|[`teal.reporter`](https://github.com/insightsengineering/teal.reporter) | allows `teal` applications to generate reports| +|[`teal`](https://insightsengineering.github.io/teal) | `shiny`-based interactive exploration framework for analyzing data| +|[`teal.widgets`](https://insightsengineering.github.io/teal.widgets) | `shiny` UI components used within `teal`| +|[`teal.data`](https://insightsengineering.github.io/teal.data) | provides the data structure used in all `teal` applications| +|[`teal.slice`](https://insightsengineering.github.io/teal.slice) | provides the filter panel to allow dynamic filtering of data| +|[`teal.code`](https://insightsengineering.github.io/teal.code) | provides a mechanism for tracking code to reproduce an analysis| +|[`teal.transform`](https://insightsengineering.github.io/teal.transform) | standardizes extracting and merging data| +|[`teal.logger`](https://insightsengineering.github.io/teal.logger) | standardizes logging within `teal` framework| +|[`teal.reporter`](https://insightsengineering.github.io/teal.reporter) | allows `teal` applications to generate reports| Although these packages are mentioned in the material, we strongly recommend visiting their vignettes to learn more about them. diff --git a/vignettes/blueprint/module_encapsulation.Rmd b/vignettes/blueprint/module_encapsulation.Rmd index 9ce5420f21..fd15e4ca31 100644 --- a/vignettes/blueprint/module_encapsulation.Rmd +++ b/vignettes/blueprint/module_encapsulation.Rmd @@ -25,6 +25,6 @@ By implementing the modular app technique from the shiny module into the creatio `teal` module developers can concentrate solely on refining parameters or encoding, and output aspects (such as data summarization and visualization) without the need to concern themselves with the intricacies of the teal framework. When developed correctly, the module seamlessly integrates with `teal`. -1. Facilitated Collaboration +1. Facilitated collaboration `teal` module development becomes an accessible entry point for developers interested in collaborating. This approach encourages user collaboration for the improvement of teal modules, as developers gain a deeper understanding of the mechanics of the teal framework. diff --git a/vignettes/blueprint/products_map.Rmd b/vignettes/blueprint/product_map.Rmd similarity index 93% rename from vignettes/blueprint/products_map.Rmd rename to vignettes/blueprint/product_map.Rmd index 6bf18283dc..6f57ebc428 100644 --- a/vignettes/blueprint/products_map.Rmd +++ b/vignettes/blueprint/product_map.Rmd @@ -1,9 +1,9 @@ --- -title: "Products Map" +title: "Product Map" author: "NEST CoreDev" output: rmarkdown::html_vignette vignette: > - %\VignetteIndexEntry{Products Map} + %\VignetteIndexEntry{Product Map} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- @@ -65,7 +65,7 @@ style modules fill:pink `teal` is a modular framework that relies on a suite of related R packages, as illustrated in the above diagram, to provide a wide range of functionalities. -`teal`'s primary function is to create web app for analysing clinical trial data, but it **has** a multitude of features distributed across various R packages. +`teal`'s primary function is to create web app for analysing clinical trial data but it **has** a multitude of features distributed across various R packages. Developers can selectively leverage these R packages, such as `teal.widgets`, `teal.code`, and `teal.logger`, to **build** `teal` modules for a `teal` app. This approach gives the developers the tools that speed up their work and avoid re-implementing existing logic and UI elements. diff --git a/vignettes/blueprint/qenv.Rmd b/vignettes/blueprint/qenv.Rmd deleted file mode 100644 index 341238fef0..0000000000 --- a/vignettes/blueprint/qenv.Rmd +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: "`qenv`" -author: "NEST CoreDev" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{`qenv`} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -## Introduction - -Reproducibility is paramount in the pharmaceutical industry. -Accurate and consistent results are essential to ensure high-quality research and the safety of patients. -By prioritizing reproducibility, researchers can validate their methods, confirm their findings, and contribute to the advancement of the field. - -[`qenv`](https://insightsengineering.github.io/teal.code/latest-tag/articles/qenv.html) is an essential feature provided by the `teal.code` package that facilitates code reproducibility. -It is a class that stores both data and code, which enables tracking of the analytical process, and thus allows for sharing and replication of R code. -Code is passed to a `qenv` object, where it is evaluated in a specific environment and stored, and can be retrieved on request. - -## `qenv` in a `teal` application - -In a `teal` application, a `qenv` object is created by the module developer in the module's server function. All data operations and their R code are appended and stored within the `qenv`'s environment, which allows for the code to be evaluated and executed in the `teal` application, and reproduced outside the `teal` application. This includes data loading, preprocessing, filtering, transformations, and plotting, etc. - -The `qenv` object makes it easy for users to reproduce and validate the results of their analyses. - -```{dot qenv_dot_diagram, echo=FALSE} -digraph G { - qenv [label = "qenv"]; - node [shape=box]; - teal_modules [label = "teal modules analysis R code"]; - library [label = "R library() calls"]; - filter_states [label = "filter states R code"]; - data [label = "data preprocessing R code"]; - teal_modules -> qenv; - library -> qenv; - edge [dir="back"]; - qenv -> filter_states; - qenv -> data; -} -``` - -Learn more about the use of `qenv` in [`teal` custom module](https://insightsengineering.github.io/teal/main/articles/creating-custom-modules.html) vignette. - -## `Show R Code` and `Reporter` - -In both the `teal.modules.clinical` and `teal.modules.general` R packages, you'll find that most modules include a convenient `Show R Code`button. -When this button is clicked, a modal window appears, revealing the R code responsible for generating the module's output. -This functionality is achieved by inspecting the qenv object, which contains the stored code. -With the Show R Code button, users can now easily copy and independently run the code to reproduce the same analysis presented in the teal module. - -![Show R Code](../../man/figures/showrcode.jpg){width=50%} - -The Reporter feature also leverages the qenv object in its operation. -Much like the Show R Code mechanism, the code displayed in a Reporter Card is extracted from the qenv object. - -![Reporter](../../man/figures/reporter.jpg){width=50%} - -To learn more about the `Reporter` feature, please visit the [teal.reporter documentation](https://insightsengineering.github.io/teal.reporter/latest-tag/index.html). - -Overall, `qenv` from `teal.code` is a powerful tool for ensuring code reproducibility and promoting high-quality research in the R programming language. diff --git a/vignettes/blueprint/reporter.jpg b/vignettes/blueprint/reporter.jpg deleted file mode 100644 index 14eff4ec5f4fc4818e2cba682f01fe7ad02af562..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 207761 zcmeFZ2|U!__b~n*GmIsaE&C|@zLYgg5<-YVp(fc0AzMwxQp!?3B`OsalEjp(g~=X5 z+1G3pLS_iVZ2znJEWgk9`~08p@Av$k=k+|V*Y~aWywBYCx#ym9?z#7#d+wPS1B`KK ztA(k#DFkDJK?lGe#F&6)Od@{s+th-o1P9 zJC3@V+5_01)E_YYP8}if0R9K;ki+r|2UOm?j1C){n}g?Jw_p#CfDrG%vp~|xt*qw8 z#+XBPHm2qWO&}PMj+^Xy=FDlPtq|lNa5mV^Y@fu@V@?vtX+W6;;)L`d5m&d6Ge(CF z9sEJ{*K-s8^IGlO)Dr}CD{s>Jv;1Fzc-%cg+<=x{0QM>O5I27SzX8g*=XNF-@XWGV zE*XCI%qAQSV7_3$Ab@Xf!d^e&C!6r8pK#R=oFjI|0OvjE%q_02!Cnx=H3G^d!rZ(7 z9WE+>)dJjo0)YHV05){tm>&{bu)ZY`Q7?CVrxS2!MXb4u9b7W4>7z=mB1Q*82z;{hRuMH@La};2+2W zfA0}s^h+o3FprRC-K0Z4b9UcmTc9q2{mkhf;{=o= zc6yvP+brJ+;N2l%hkw;YIGhbWvRMxJM0lP#duUUKfKS9ZUssDm00#UZeuEA|#?XF9 z0tyB9DJT%~g?u{Z%jdzjpKnYdS11_rf;=GQUnRfSaQyKm0DK;X&Or-M0Kf_Pqu#zB zZ#|$eP)_@!^k-dV$n(eBupc%2pf8{Wf5;L#4Zep0*aOu0y)_5u6DaZd;QqZniwVnqmIExNEb<6pgdt)N;vo3k3vLaB z4np^LIsU|F{=)o$d6K!8d7OC=;}aYFHyv3)<3OUHI`jbg{fjOTGJvKgVjsc)PzRI| z0tjJ98L=C*V}wA1mNh}C@h=HCweow9{8gquB!K?xjbC_dYHUnw+u8QA$^E@1mjajO z@ACf8^@%aPicX>B^e6!6>`v_4hP@7ew{-ko&BjPNuXUI74 zOk}W+m-kr-Bd|JnNSFt>sVGTksA=qipv|>r69Gr2h7o+t+#n@p}}E4=^-{B%wU$_1|v-f5{D!qIUtV)qy_DP_Ch9* z1!MyqfsR2ZfW3MHI}e7!AuJRF#Y0KZZ%`VP0cAni&=aT-Du&9TDySA}g4&?>P%ktL ztmiW{2N9uFhysJbkT6adFH8uAf=R;^VHz+Um?6vrb`WLL0E$%`q7 z=^WEVrfW>MnI17cV=7~+Wol#UWg2IiV_Jbja1OWtdnU6AiF^4n9Gp92@W-euJ1Y_wl^C}AqivWu(i#8aG$5?z>&a))5+-JeF zykYskGR3ljL?VTdibw;b4bl~P78#GcgM5Z0AiI#Ckz`g5RuroSt0}7!YXEC3YdY&w z)*99>)@fD>+g3JdHa#{QHg~p2wiLD;wpVPOY@gXE?AzF7*$vo_u=}#du-|4cVsB(0 zVPEFp;MmEb%VEpm!x7DKo8vjhTaF2i^({PG6t);|aoG~O<=U3KEpN6AZdvB!KF#6Wr&x)45-AcXH2f zW!oyV)p)Dx)~Ky_w^nZL-@3Amcbob)n{EEvlD9qG*0ODe2gxJDW5VOkbCD;Tr=Dku z7tSlmYs~A$8^@c&+sONwkA+W`&z#SfFNv>^uY-@s&%?i)-+@1Z|1N(u|F{5LKt{k^ z;Iu%BK(Rodz{Ym5?MB-@wkK>a+TOK&O;AK|ub_uuq99(dS8zi}LdZnOPw2W(xzMOE zLRdlARybTZQ@BxhUW89%kBFN{qDZmGkSLR=f~cM7dC_dqccLp|;$miEXTUL!t>;zb#vd{8%01k_gvehDLq(-OBO8YGB2M0Xt65xV2yj*cCaow7Ua zcgF6-?;Mq6m(-E;l)NcfCrOk-Nm)r@r3$2mq}il(q`jqYNjFQc$;iq$%3PKymzj|j zlr@(P^U4>3XCPghpAI1BMAC#Dt zbd>^>9x3%JZ&5Z<4pS~ro=_1`Ij9n=Qm*n%RZ7)K^}1@aDqT%e?X+5s+ORs0x`leI z`YZJ%4FwH1jk_8>yEu25?!xV=*hSi{xZ7iQ=I#MaUQH{_%bInXG%andV67spS#2rp zliK&R`*rwq4(TN8ywzpa-KUGwt<(7c+M=&o?JpXj@#c zXt3O3dDt?;a`K?U!Qg|hteC7UtWvE;tfj33tjld68*`gfo6$qEhk_2hwq>zBWP8{4 zi=Db1)~@+5?_td0r-xUM>^qWjWY}KLKGeR>f!o2wA>U!malhjY$MK`8M=u<0J0^V0 z=U9ak(#gT;vD1pPiF2CsXBSPEc$dE8vd1Hix110@ar#6xh8yFGd3logq~pn_C#kMB zu8&+-PMM#&cZ%p{>~_m-&V8@@P4`(31CJXX)1C&NH#}#&47^gkX1&qg>E81`#y%N7 zB;NzRS-xw2Hhy`2jMI*%@&2s-C;ck}cmn(a8Un=wBLY91Q9KiWW;{qQC@qK>Y#IDG z1Qv2Uq~a_eaO&TM%7tDEod`1wyBkIhcL;wOu`MDX;$5UdWJ2WhIn#5w=Mm@K&evgg zU}LZo7mO}EjDkg-imJm&;x6JoN1H`IiD8fNi)oKli@g#1J${G={^Z8C8|Q9JrCOzy-ITbQc=LN2CaooXcY4+>_FJL1#%~|IU2#Y1&Tn_9 z8QvMaclX`J-xIx;aBuCt`~9xWy_rQ>Vp&O98xMRQ3_LV@SoTQfQF=B@c3Ae89EY6d zT%Fwf$HI@39@Fvy^2VRoJ!#0-&d+};`ZT40sUWmq_L#iVu|*m36Q7yefUI@;a|- zN7dbG{_2z(_L_?|48l3W%9}H9=4-ubr|K|u!}Uk&dm3yTIvOn--!_>x)i)b86W$uU zt!mM0schA0EpO9mD|@H;uC!gVy|hECqpVZAv*Nw(`&S?IKh$)gyK1}lcQ^Hz_q6p| z_kQTJ?;GfM=^r0(AD9_DJxCe~8=?$Hk1&rUj&2=I|0w$L(U|-geq3w3dSd^?yUD|o z!&7ckbDu&!Q9ob&!uchA8a16iqcKx8YdZV>tMk{-b7$r#^YIJY7VdqM`&P2JckvzZ zDDg8Xn8a90UKU!;`@Z{o-O8brkE{Nxl(j^%5c$cv&U*8P{SiL7c}Ri1$74ADn;g1%F`t*ysO(z!vET^z-=__~(A{ z$2%KX4hF*Q42ZgKdCy@Mlg@7&xyJiWYqd_&HLhJ{B& zo{PJ9DgN@6gv1-EH`CH@-M*9YC_5+jao&^sr^PQzO3TVCDqq#rH#9aizinyl>h9_7 z>mL{#nwXsW^!dy5%~#e)3bSKP3B`T-$(LOb7%Vf!ve}#uN^2 z_%;Od4s{kDBU_|v5bsWn7*@W0*B`#9Ws}@xN8~>h{DECSYWIXRX;ZWxlKpFf#r~Hh z`$Mollq7=pIIVZfN++aNSVr^`J`g#LXeLX7uxx{>E;+3k zITGVAr|QIjemk8-MA29ev1n7JLKsk|CUu4ZUA%@{|3bJQa`O<des8WlTp3`M@*-%Jf_B*ENC8;)vHf8IXSeayFeumjO*@&_g?H z_llwZP5j?#`G3(`W>!-*8;h;$nd8qWv>)nXK%Y?CDWy@-=ycVK7~+Y*q12{xc7x>Z z3Bx;i_6-qzRk~2GW5pmkRywZ%D&)FSvSQE_BgIB?nQOt znh0b$N2-8GZ4FP7J^3(2F>9NzRq*xdmsScfY>vt@`{S~iQCH8!r&59eVcVkb1%8E= zt7jrqq!NUWQd_K>6*yGK<|FVU>~e4tnl2JfX9uI+be;jNjS#5EQN&>a@o?6Lwig4c z`OJVO=T_?yA*u}niXUY_vG*9zhu3J@nkoa@eqzT2o-CI_6|l4=w>*n5K2E#Yo^@$K zLe=AGLawrYbmK+EFDK7*h0%rSmuDVuH!vWw{}@@mlP2<#0gVCfNM~{N0f0$s+{|be zopOr-CE8 z8p$FaarW1koVKCeJK-~xFr-6mi3(@8z>j^4zz=_wgRc|G@}LQJpu9SATb-RRfgk4) zH!*4+Ag)<@EcfIo_FRmNanB7j`^rBmD3s!A0!7I(pug)W`yVu z{trEeDf_45p#MQb3zzs{w!Ko+EqmPu{&9&2f@v@7EyAd0Z_T z=QqX^HHhNW%n~Q3nwNg~)UB!dT*{&7+cSiETg9zuUF^woj?d`>t6EN%=d(%T!-o<) z6RLEdq&o^B{a-(yn=v)3jyi>_Wmailoc}OcY2HaavLE;9el-*|{lSC}#`r*|EB?i8 za>(_V!z^*8(%}r~Av-iav*~SS>*#+ka%;-eAdc0KaeR!ZZ_>8($nznUl=D`?Z28<@ z$i8>DIcs5OdwleDc-ZxNS5`C8DDE6qchY7HeW-@7OW!#bF*Kl8*dl=C73=3*D5aGfIVgB`G9d5=QysTo-fDHMTH zG)?*jK@L4WhF;es2;c_Z;=W%SibkK`-1jiL{^u6Ut>D;KqY0L%i>?GWg1B~2?uc8~ z(V?1Fd@=(Xe?UgR=u9!vVL%Bk3}{2SU~D3%&((HA2boTefA~U?O?SrXT5aJ`viWnhq7L#pr}~IB;nceSE0Ff$rZg1R}FTD z^@gGE7H6zmys2=^m9<^zSqUUddNnd2K_9e;s-aM6L%*_X|=i z=vNJusJ>(`qFMdIBrZX?L^!nA!|~l2;eF^!yb>?n?r~dC(Li(ZSRHccm$@-sw?2Wn zhJD;G4dO=$o>%m)%f8cStPny(b8%}DwHL}s9jZg{)vD@lecaO)*NLk;Y4hw&MRV-V z>WQXD4q5I>le#BvGavE%io;_$oYTxbi#H7dW` zsuoGSnik_UM0_qwFRU{?_@hTE<;k^1y3l}wo`TMl(hTR5^c?MrFZqV>3k#f-4}In zlWn`e-G|}^^S24keQ{egHOx@zh~8Nnr6%toH72G5b^|R_(R%&76JunBl=+}Z%r@IW zrh>O~>E-b&u4z_5CcQj25IJ>*xOQ@sZuVV0_iIK#d7g2B4{vUJVIAAfbeSzhdA}Kn zMSQ7oBTrF$qB>D8+uwB4rRMTECytMKmLJw{o2}$ks+@a^Z%rY~lrNY}9v4|PCG}n_ z4VrG55cIt9=IyZzP48Nxd!JG?2`Y-?_<_K2L{_=i!nOim2E@PkIHPM+st3OLDfsbKLNdBGIb9_DsP2Vx4J=wD$N>f~) z0NtMkR!lGtX;eu5%t4D&T>6c=8lzIZFnvz3zX2RU&^Vq8Uw!bj&3cjIm(+2jsB7D);!@w2aW>#|FB zwyE5}O)Qe-Z07SP13A8aRPU}bE%11>j`P)cXeu7C5X1l6rK~$z@iXBXnrOE;h-+p* zV3UyeeT?02yY1*#E$wuz^9!Gos}|TeV)wpj~QcB~> z#gj|fPj*(1)L+s#SfF-^t;5>UDU1PK*4KZ1B_z2Ssh22k+OhbS`W}ey7S$8QM&3qp zbm^z>nsZbe7#(<~9Yd@txDA)oW`WM};X_ZxMrRlnu|r4paQ8?yl_qNa~^ z`81}2grv4LyO1!gU|4moV#&uS##rZmeO(g9^0;+ZSFPvOW20e}!EEb7=9AUjboO$R zT{yWdFRH^yy3OaK2=RVtX=S`dW0boC*PBl-jt&cc3Yt67DR}1E_T8OP56wnzDSsa7 zoBa}5rP@$&kIQo9=~Gg$uVLQY92kQ~32xH;@v*NyxA6>PCwx?Ia#P4n2FsX8vdE-t zoS}4t6Sojq_E6HH?jqiEmb@%tyW-+%#cF3UZE0Upz|eY?I!;(+eq4P4M1u~MjRe-T zpW(3HE*vj-SJgx2~Sj4wE~XG-4wVd%VOV z@LBEpdbO5teN)~$dgqswyXMaidWlX7sOY#jSy=|0NO?ya?*`r;0~*Y-BVSdmdt17Y zQN_EPN9lU;PCZdAmx;Y=PsN#NH8?MBu-Dn{IGz_%Y97kzTJ=tFB7|)z-kB%nIpyRs zrnR%76B!XViCVbyj0~?U7F-c?K7ON%1yST=_NGO!5x1XEe3{C#II%WAHFaEdvTm+? zZD=7!so0c$v}|nW#B(O3MA-V(V3I20v+i-$BL%jVEhprqQg*r$VLT1B zbd!^t)(*Ds=AZEkTG8k|=<%E};-N8CT&-Rdmk*Aow4HsrQ7^OdsafvqkjcGR-RUs1 z8)k?C>WfDqm!#5d$5QebkS8IfhJ%(D1x47bULq<^9Uz^!!;&q$hv~f#uSWe2(ZKk< z9|$K~{nmSF_!>Ft8QK%Vcv0Ugn|T_s2A%X#oObVQ{?6(yuU^+Ke`lw@iL*C+WYgu- zs8H>RfltuBi8@m;F>;^eQm2*z@E^t!uSWN<^+gkNm=$+WWrv1+vfe z2Z`LCs=O$7eTRmE<<3hE&dL0k+lP=Vp%h#C7>XP1<=1&xAVca2LW`|Ig2hYdY#?mZ z;94oZKHteli{tJctfd|~pc zYn72(p-a81R`cDRb8GW=r(j{bk}nPIif;RjyN`PyaFs%~q6A@4JvA~BzC&~M+H{fX zTb3lQl!6$}j$7wh+nUvN>~eyO)b!%w9pLkv$mUEW$^Pa>O1$P>F^iA=hG)yl)el}D zcVBcrwH*rINl3>G4b$1#D2DVtOtCdyy1d@sy16b>hMeUyaa>@^x_9z}Qk8QMlx~`3 zOQ6W94P5BMtvu^uhV{Gguj9u1;#6xLhH1Oeya^MdLh4)V)N}eq|4?@{`NTFRJCr)dd9JM0-hwVILe2 zp)X2iknvN<1?Tat|&J9gDfx zacIj#S^p4$&kznyx*@O=c#bNLilYdD>EW2c{H=1~v}@O~fy(dD?l+xAb(TFir0Q{< zzq#9wge1R5e)pkxM-5=MFd)~?nEotrLj{wd@H{7%p&?pETbs6qLC-AH?LNo7wH)zL z5iS|v;65P=Q9-oFHz;0p>gYFneO1aizi8(HQ_|YOOJxB_iR2Z8+7=E>?Ej0N|tJ=$Mt8k!u0zB zFCL5ki|X!>QLsaELCwnZ1NNH9#NSygL|5gEHxn394k0;Vi!@SlGHhovf31fjw``z zb;7yNM2YnTYWgX&EFJx#y?W^5=)Twk^rJ_m0%g;Oa(sfAU^asVR2$? zaC%Z0yQ}~3ICWP`fnh3FvG`!q!TdiZy;}idGiIKB^s8p0c3sMG9=FpEPS?CM$qeh7Qx^4_kXQF?=AVntD;;=qX=A4`d zBVG+R4CO9f32it1e0k`ZCa2+^$ncUbUQuG2B1-MuW;iOQv(u2ZlzMs9XB5Hj}USw6(2&DoZ+)WW9ctRn>Fk?x{$&1f$cZJJ@3? zAY8yJ%vF7{BJaRS|LqPhtGeB`ocP8zb%U8>E#dmn2hC9t_%xi~;&A!6ZjHFUro3NVVt=5TCZ}F3s8Ze76@iY0Lc8Ru<%z5!a{_#;f3@BsPTJN?=EiUlPVF z*s{cKq%>T>SP>g(i&yYPMP3!Cz?za{w)~&f&4inGB!oTKp?W>i(&xLHgTCsvE>oEx!g6<1bVLQK1NdN;Xbc7I>3*kI=^ z39l_2JRud!CkT5%?Cw8(qjcy4$H0Ms9r=37#;>rFEMa_%6PzowolsgTK zg2hho%(=J|nN~^hBHJx_?WixpaYQcBZf=DEr<-n7sR!sjxbY-4WAp;@S<;i<=2e`K z(EJL8L^(!PB4#z92NxS(nHJ{NpCQiPa#TwdUOcuVA!lEn5K1Gl4lEg*^bW8YMJIsq zR%fO0rFG+rs*G9sH=kPT2oA}udKnw#_T8sf?rTgR=-H0l9#mzQvM7~kA0HK8Gn^Dr zldi3G%`Ns-Vi{!ydwC17;d!O=8^=BndP$%H;cCV8jYA&LdtT0X+9;PQ%EnCTd$p~v zj+3amctu(foyUx#M<3FDbt~n2Hg1AuZ0Bzy-FMHMd?1rUi{KiD;*@tnSS{HI$QxGQ|30N;$Rt*moM_eb4HG=$1 zQ&Crxh(`*&@~z?7&I>t?{q`gq4$)!CzC>RYdCP3Wuv?cap5DRr47<#JG)SqpxiTh1 z7{6H~O2&TNNz}f)qffI%a#Y}+RTn?bEZ9C`ChWy3-j8;<6vawCK(?8}T%n7RasCq= zXN&zJR8B_TcJXkIU@|+o_sz7}+>DhXosF9!=9BThm*q~lf@y6!^7U=J7;L@6>;=A5 z-*ue8fi)zH6ht`I38?#Qgg(wvXxzfizn5bMi8;6YGC=8#6Q5eCg0)>Zwta17PcdDj z>F`~A!bPo_luse6^0bE~i-QHLcgn~KMf+^B3Eh)j)V zW0(!)s4S@y;kBd26o)ydh~%Yb0Z9SZD}wXR=ZF(Gz=0YpRt<&G0&)5Ivw)tjVM zO_7P9Ga&mCZ;{4BmIC*r)(<9LzxvDonUNE+GK=A%*WyYz%jXR!reBA&8{2$NFQ`gh z&{}ED8qw1U)D}Bt{q77`NY*)eS&0Gn0b)lQ%cTdyWb{dNrxq%5736o)BOZ6Xe?-C@CIYc_kmq?b2U&l4?28Uc35@@yDSz+L)Ytl| z0j0fINwO{;s|@sXC}Qdu$^J#z>;CyKl}DmP-Zq_5sxB5J^@QW!FJ2-LEjtG#Cjzgy zlI-J?q*qodN8*=!WRvg_IiAMkM9Q8?*}6q$svS8JM|{~>mizs<1#h6f+KY>~I|UsM z@>4lYWv>N)<&z%|{cK(u#ETgy}0oVTnRoJ?TJnn&bneKv!~YM$uU~iI}=$~ z2jy6#ZYTdNnh0jv%QuFoA>BCdYOTQ{>Ym9qKg-56h(K#zx!Ur+QmWhJhi>yM#t zcZvw^G%rhQdYo$g?uPs6lrPtBrVHsavFvf|>qij}pav$b4*7EAeQe|@n_{iH7aR3@ zZZYc;0cj{o6(q)zB`2Eh2;9w!X?-9ve646KGNn?gKkZ&nJZ2@byS_E&9wEcJdp^r z!~2Es@}38e5*5ci{AMn^Bpd?gU96kuFaMqQcQIAE5efI&@oPNDmXIJ5Mhm{fs9L~~ zC8K1?A;*E1@iUpCr99GgSA%y|HK%APMq=N#7QBq#$13&2&S=OA7cAv|if{!-mTHbW zTdhiG$7g@-vpZPh=J!%CoIdw1oz1dLJ@tlpt(5yGcKS!ZY@XTWs6{sg1)uZNH>n0> z5n|kg;p<6mUaA)H+iKac7s_@I>Z-0uoYpjyAevEmomW}O zLCda4^Ss~(KY(0vQx z7eexkrBZiCUk*p`d!0O>VmdX4@d4z$!0AJO-D30!STWg|=x1C?oW5MLyrb-Sv5ku0 zyCV1C0($og*^&Nu>={}#;S>WJvT3v>Pfg+Lk0Tp~-nlw1l&3!p5IW>)|H)<76F8(R zDSE1g@F?04M+%(Jr)Wpajjs^qX_JfanevZpFWHs9n=4IH`1Y_VoVo(Nc&^l-F}@V} zssBcVGo7uHf{c)~>kds}#mW-*`R`ju1rGj;oovS5$HyD%PK!tm$|Zt&??SjI#<(I$sOa z$Q32$y?Txw_f+EAw>mms=0^{QE%2uC{CcSV8Y?1LaeDOpDmyKiYD-MABy-@YyNN6P zaV5Iax2(IITG20u^p|!Qmq3u4k5rhKoav;wF1`r3mvUrnqT=}C{L1(Y9Yx(r?7KhV zFQBEtVW2fCk^DL|jFsh!!CDgzdO+^+3Xi^Rox*Z6W59G_O zAC(YH%e6C3?--9P+S5#U5jdYkGMfmyPCPt`tRLmDC*m*n9zNJD`!c!K^Qjv1tLQDp zqS%W;80!yv#g7An$*My~i*sC_7^}76@}X~kKkj+9xcj7KgmIa+`VqL&8I5MCjqcR( z^16%Uk|=%ryQnbx~0{r)^a^zaibC)wyJ)#36~ zX6{6_UZCLc>_SfCv+7qOy)VMN{9LuPBTeon99(FT<)6%C26G0E-iY2(Bd6Vj2VVOY zechahCvUqsE&A%D?nq(3MZ6Wfdd>P6B&)f~3DSWIi8gfBDWaWf0znWPPB}&ntjBD1 zBduLksj_;szFMf%C$Pqx5Nme*$Tz9j){76D&(U_1^5z>U`cxCLO(0RRS)AiTDH?e! zCun$Pd9b1Hw`azzJCgziR#z2c4g5yEA8_9`6sI@hig9%*@#i{g3765_B?hQEx@5vc z@7dw=It|(%Ufp!BMDQx4ol^TmJg|5op^(Z#)||AtNFY8e1tQFrXL1OJ76MOJM0zIYoTjtbHLhR#QF)ZdVDOM?FHGNm~C1@q{lp#w{+$ZOc&hYaB6zb+ws8wa(tPM-)s6)8g8r+g! zloHrc{lLJ^z`gI#E=k z?>Mf??vr7iSDL!uP)2H&=U$8PfR@KHR*Oto=f*NiN*o4~O`O^-o(-?)KCcW_Q2&(s zXzXNmHJ<~QcF)Wuap$=Trl6EBAtrqGR`TW+&av5n@eb^2dKq%LfoiLY+1r&OWcfZ) z&*nb5DRJYu#nsXEOXDFe&D9c}4xcjQa(dG#+=FxH!HJ4p9xf)eb#hU8U!vSoAAFMC zDg1Mw7P+>k#lkPKufaao<|e`83!klt=)?J{xoikxT4W$zniU8#`G74)@GsB|w0QZ@-aHSwh0 z&ekNCn*BK?=uD4mzTBfO`l0^}oSlwo6@Bpya3=dW)nSLZ@_WEl#sw4n5l|!nSc^75 zg3#4(Sj@NHjfc4m=&hmZnlBB)31Em8DeD$2m+4<#GN7EL{?!aWaxoaGM{uo&cB9vR zp7@juK{?a5BiI+>9|vX8t#|Jq?oxfnfG%MkMay{|`JS|lo-hryIY8J&=Z{K+9{&DX zsMla8wUcbWA;%Q|^EKZuY{!`g?7!aH{*L``Vw)=czgK5R;}%?KIdb2Jv*r$e*o)GQ z8bB@iVtCN=PQB>w=@wLwCKHDRS<8J?5ZH0s0RlC9d}$ckbM&X48Y$dB=~LXSQrfx^ z17cZcKrMyjm-HrMU~*wSFv=h}$wV@G|E0-CvMBmBGqkWiK;#y?W))cuVzY^c!emwA zv_1LmWdG9q?z`ccMp<{t@^?6nzKFpz%Pz=M&S7!1+$z_|r(&MdX77`pm%J!(<9TKr zZBAJ?u+dy|+5SfG-Zz^;!=pv`B}22sicapEgZ3%AE^sfT-QkOg&f$vuwAL=OBG!(} zI!dxhxw{yVYR`b)fTZ827_x*M z)=~}wu~+iLQ!xDus1P$f2+p_7Qb3MXFOH~!p(~^SI_Ci$nLp@YNU9)HcV@?hPHHm) z+Lm#dx{iya$DVJ_r-J0Doi)0O>F=SRy*q{2t_yvaEyQI7{#_NulPRb$(x07WOGIwH z-?!OUEm_Gu%2X7{LO0rVed!u|T}I zbNtfnybC(cDbFi!_OcqMn+-=lsYU0V@X3-p6&+Jvb`G~PM*^EJaM;bfg~a{l&IEZo z@r3R61l0+R<0oJhLruXDW`etRE|V4iW!i;&hvd~5-d+%q)aaD6X2)~9@AG>B18csR z6IpCzo2&1hm~E5E7CL<<2$c|Vn$z4i+4%;VP+d=H-n2lwMWF2dO*1_F|7(U9>^9J+ zRB_K#fn&dHOUlgb$|YybNLQXuUH?#VF01p$umB<1e|=cA{_nJ)|LXAK{yDtLxqn#T zlacBK>Kv7V`>&bvEntR$hetMt1_Lte{QDenqCijyb2Yt`2w=GaO zdU{vJ@xZ|M^jmKtgsv2rTaESIKiu${n-f&4>Z3>u`r zJxH6T(E~|&42aj2dxHr_<^eGnVCzT*WUI)4U|x$&j(y4a!YFv;P%{m&*(3w{4{e%J ztuCTx*uVl{NsXgRplJK?ROT##F2+ftrj*P%J%{?v1EyUD>wa- zBb}*p479b$DROz`Pfl(297QevAks&cSVCchVC{Ehs||Ndvrcbx|718!+jN^@rn zfg5|wZ5%C5ZZrO%*=~b!>&CB$`1uuFZRYq?uaqQpN1yX)uwP#c@;auyxiKY{E=QDY z0?{9|6}g&X_!T1@Sfe;L=n`RO7tfs0SST>0ujP`cK4iBzz)Tkok^1xaT_D;zt}_eLJ<_c_ByaCXBY#-4@g0 zNAJK94w134)6uI#}=#gMqGmHNaL__fE zYK9I?ZCkl#<0L|#cvX~_#e548bGxRg^sWJV%3>}>gv6|HJA|X+z+{rqTY`%JKz@0Q z9Fuc=W@CSlPuHMR=lR`3$$Gu-0zxYqd!OwRcwrgx`mpDvNu}}i+@$k{1r$RN<=jto zF4QWVR1Tk1eoHb-q=r8Ddd{_{D7$+HalVYFEKTXmtzq`+7ACgk3i)mMtm=DFJ=XW1 z%x+XCJ7uQnhii2|iTIolmz_V;+Im1@BhJxp86?D*joa{0f!7loMb#uKky33Jzfz(5b$B z;EfkMenwJ7rWue-`D7qu8q(qpmBdxE1?igR$@TZ+mBy@Bp-u449KhyCw&H&Z?k5$grCDPjZtN-=kPNr zUplwvsTMUFJhKEt?;G;dj{k9rK*7Io+z6i|7k5EfdI54Bn(N$?O@iqG; zl4-cy3rMCX&mJdXT2qioBe}PGUw@V6v&9_qSHXUwOZ<-_{Iy*`lFYchYrOWPTxu8^a>7`T)zja|8 zmDO>zk+Pqg+;CO@THmWcdN+Pb^|7LDi?6x&29xIy^9 z^u3;&11TGN7m!PNj%1xj50PGBohykQHdepcn(*6MZ(KkB6@(oQfOyG2<^`zQ*DiF5 zS?{qsd`X*Mr^0gI{r;K@DHIMD>lzJ`*qy-9!YV253+i2SIe_yFa``k{DZJpw0b%jtLt`l zHKg;7q|V7Ji*Yj+`4GiEkZes=Wk3e*VBORJ8$Eunx}XQ$xhGky+M95Ta}JO5o_TL5 zn5f`GIG?ufG!{8HCm1QEv;TO5$8F+MUD;g76;~HJfm@%GrLBW~+LdfNFP;PZ4*nQ= z@g0F`a<=?dpWa!NFCk4LMd5YM$%0!uj=0}*zX7f2ANC+TFRx5&jkJ}?3QrSJ+d^S+ z_SV10WvzDzsS6zDF|f;=ewMZN1w-GNLbk5@4_pqode^;2f_0W{EFL{w@&^`G9mtXc zWZ8uyY4%V29Vw7514#Ynk$Qv{F1;yHsqvFPb4MgG7N#>7eL(1mzb2>lA)oZRh%Z`8 zg1JirS}lA`w$CF@vPy|Z^1(pfLtXep%K8G(%w3SN05n6`g6s4FiW#F?g_51rN?>ns z|3>+@UjFYlhQew^=Wfl4q2pS%62|f1ME=_|80t!)Re?)mvUjEuK|%et^74AiUU5yz z$$L?)KLTi*zr6zyG_bhDVXvTz$CA`SK==g=+078zaoP*(u|f2tc~j6tp-l=U^u}g- z;`qnNgJZ?bNw=FnPc`JYp}&9jZ-=6&o3kLJ|6f>xA0-A4cvByPsj(A8;}ZSQtGwNW z@8|lL9FZG08Q_1{P@tEh$H8*DbSk5hcJccnO}vzvR!e_~9^G7zsT?@sT~*9`x*zF0 zZT%b%_;n{GW_>GY9s={RZC?8WYX@g$?^!+T?4qxSW;XOygF=Jrbh3@oJq;l7(u@PB zOm6%^dgv-@9*)pPm&ry?-iPNCPT9xfJ||!FTJOJe_X{^?e7^Jg;qzkTEh6|UdFItp zU6juI`jN!pW;91>7TL^D!Y5qVe%4kZej==eWo%J6jbE z?`wT&Vyibx?w^R7N8L^43i*o8tB$NfW#YWYT@&t|{#3RnB31sVk_(aa+E&a&bWL#M z17?3(+MP)?uPE?K#Bc_|1m8)s1cu2;w>$q;Ak*?ki+}OeLCVl(H^Q;04Qh zvkgchOYQ#xI+=VRe~H@pUSAhOEZ|*kqqCzJknAi7$PmEl)aC8>$p%xu?%0nb+H$X> z(Fr&Z=i5$CHOA~bM@O~RT#m(kvNxv65hK89Tiqp$!=@{61PgXbfTMh8y8y7T>b@14 zDwGWsnCK}RzoquMDHw;gpt;l1fo0qmmTevzG&@cvJ@Mli92<)K(uLUDLcjK|u? zKxqL1X+o4LHPWRkEfj^&yCjqlAc=R_?sLv==R4=#uiW3gzx@Xy$-M77@61|j);#N3 zYoIOYyj9|vh!7wI_V)Qp9VgT)bZ0dXg@HbkYHm;J?^uXRuLx_4ka~)-rbP)NtP0-o zr6%fY&7&;3vC$uJ3OmyqnZc4r?Kilbw3+%e0|i^PzZx3ec@=Rs3Is>eLF6OfM6&Q* z^duFu#EtTa;z52J`1t^+F~Dy-zPXeGUs0e4DP00v+i~JC@FgnnGi1${%Zu#0Futpe zj;wnDq>m3t+;c-9nU?`Lep_OdZ#@k{+|o&>+*)*i;+K(^NO=R4qXEyzcYPgz(_yPT z95DpkTvdJ=LCy=*>pA{I*g!K|D#6D~{g@K}!#Gs1k}ZD!37S?Zj>0*;3K}O99&tZ6 z^90@a8iUgu-nCY}hU=ae-00mO^jn+TEecnxDcxJ<;hCu3xp96=;oasG>!$k3!Cg5R zNxWKNJoIzU=UIyQYrgr`zOkCb39kn9F@GaGm(9poW?H`Pl(pR2wSa(we#2q=t#11_ z-!Fc>Jr-`_w@p}AdIMp_7ThscIc^#mIKM9HR;GSJ{`GpwBg74mP&cB9?P=5r8DUGc zP4Di?zv^7#!?d|X+-RfjwK-6?kw105MCJbWTK5;mRHSh{1G<@!N9Snflp^$4 zW1y3}T5)OVdP2QrI99G@hJEXL!~OV*YjO^UZ&pJ>s~DqZh?Nsxy_$tlnt7MVdE_^k zP^-SXu`NS^?Hn&+jl6Y4s8HkE1>ZnhvAi3&S@*loY%`VDy%nBo))s!uk zjbbz1U!MOuAms(-#cXS`8Gj?5&c8QIv$aa)he{LplEDgsq?>;9K49g59OudBXN6|w#HFqv%qg1sY|Y|%}} z6creINB3cGkjkOt34oyY99;-MF7XnZAlT?qJf3XGW(Ff?BT))XII8u{09UmbK5ux)qw(s53 z(EaEeIN@_b)L7>b%0Ya0GQQ^;rpAI?;d1bC#S`fc`{b87@z-@1uR4S*YjbEg&>ezr zKE4rWqw@4 zkqv1o1>J`iAxYzmBr*J)$$+R5G~b^0R7G!*xY*d5?ZGBVzDUhXh48ufnNhwc@eM-Z z90ixJFvp;P=4?^0r#>lBM_s-1ONgw;X76LH7dN$C^JP1I;lgBG|r*KwZY=Xan5q2 zBy=Qv`95?<)e%+*Ek7wp&>_aL=iz?Y%1`%@xcgY%QaX6WjIKiQH&ZMrHHCmFJ@PYC z8dT}}m-Qupmq1ki^iSLbux|WoH{m-~tV6BNESeoXo|qv9*0J}H*k3k=>b0nnFS$Zr z~Sq6pOeXL4rlR_X_7zD^ra$@9rAu zaB5vNl}f!gHkc}5vHI2C6Mh+40VOdf>yV3;th2nUR-0f$t=B8!7$w@oVLo~(-^`N( zM6f!?;PrH(4y7gqyAr%D#jV^`t7VET51+LrlkHQ$iw=WC>D5Pd=e-SD8%Aoo)8ZD^ zrLrVh3{GWEPokM50%iS8`rpjFtH$%DK%Y4ty+G91b}9!qhlQ(Y27# zI~VRc=NYYGum*T`+4U-a-ct-Ufl<_d61R2rJ0U`vp480-@T zfl+{r=IdiIkLH_$euk0wj z->FJnI+1 zAD(+7Ov;#q=+haVA_$PsoYC{!6 z??NBKnF5ben$iS_s#BV@rv@^TZ$w+xcP7s~vlQehxX0RRIflMacQ~*fBr4o+9$IZ` zot%4kbL{q;#DJ9$!}IT}9{b!Ig79x~%$+n`32W#XEy2nm>e$-w%%%f{r6Q3BEOLj; z+uweNvejvA-TDE-M#}R0a4;j<_@ToK5rUX%=o6 zezP@kTl3BqORc>O3bb4W+XhXmoAZ{$N0duw+$qx1t~vP?bh=l1b!W2=O-O~asDSP~ zbtWB#D^M_K8^pGBv?8U}eU+R8YaYMuyv@`@l2}*YWdDq$r~yR%I8+|2dWd^Fj5FG= z8^2TWwrxP#Q(@S-Ve6d+;GPx=R-fN1JENhzFXz*PFW#`$g`1b83B96(o_Dd2L{K+W z)zX=}{V*AzD1lo6Nf+;d4wbGEembi``$3iG*|wpTUPzN+)8!b*ac#7nld6iPZ(tiKu_r7o+enViU@ZehesruuwyV zuweHV$F8*%&V9*BCHp=Za!#(Y5NQayxFbZb#wT%h#jk1PJuL^uM`fD*>Bw0d03mtT z1y<JgJ>h*4Wd=kyNM3EYNjUioIIb+rYosLw9t<;I=v0RBq-hKNqFk zTz3Jeu5p#|#763Mo6lW2NN<~M0`u3)1=HbChCm1m@1pq!%4I|;JK+MSpPE4Yj zpD%Kw9FJt&p7Quk6|@H6Kxq(*wEzVvozOU580Acmf`SMz^&zhsDc)bBGCZ&FFgHdOvD^uIlKiWE#+WDMgZC|1I7g#WW8kx#Q0{w{Mt}wzN!R4Us32> zG=@Um@tvya^IskLYefFPmXY7O!Y+ZzcL@iuOLJ2FZ;teH2+kQvN*a%ZF7K7Qa)bd@{}+_nzty|?cPg~Kig4DqC~BRNBeB6L z*Y$u~|27RERGEY5xcAV0!QISl!_7RfJx&90IF>=^vS1E;eiJoa#JDL;nFs5&3-)fg z$q%3n{x_h_=Wjq8%O`={^r>vWp5;co;x(cSezg(GT-IbOCLM`Z(ASOAk9|6|P%VQk zrH+_t!P;VS&g!g)1k7o(v)+uh8PJ*V+C}t95QXPfV7OI6A+a!v7&h@Pc3HYZEvz%1 zldd#bqv7p=J5jD8>vE{I>^44nw^a?(VO}lueUD?fB6<~kQ#li?^|;NwlZv|cg59|* zpVo(dMjZCM$_w)8+{e+baO@+AyoFW z_XtAz2akc_S|K+BdNCG#&0<0u10>fn(4n%`AnZ=dto-|(@ z01h#PAA~!?aGLf7YUB_Kq$MUhv%Hd?=E9k8PVX1$QIiI>>l3XjQ2h9WI0EE(Zv`o7 z`s56K`#PN!k`7(Y`v_}f-5w7&g_y|KH$3L#pIk*{!tw}TXqz_HYD^3C4Yf=*p>+hN zD(n;u9}W6Dm2uq_JZf2FSCn)aU*NskY|dJNyb=GX-2fbmz`;w`%AL=Q)SpGiLWs`r z5saGKP(=8rX7)6>p0^4PH++ZRN2;<5iIPND%+B!J`*OLU0~lbQjR+ErDO3%dED zaH|T=_IF1rIa*COP*WR}F;Ir&#YY(DSjr|p0{6zzk1#^cRZ`E^d9_$4UKckuaYW(G zV_KS+f?z1M@lBlKd5s4ByW3^Xs4;89<~Q_6CE+%i>?(*7@xwQ~`RidCxo2t6rA&C5 zNJ@^BRJA4_yO+E`)oe1XZ^+n5x;L#*B%l?mKbtN4s?@R8f6ouQei`6|^Q~@>Cde8C z;K(q}!A7=Lm_WceHV2L=0?JalL`=u;152hSbOh3kE@vD$X-!b?Ly#4I0SaGo-E%{) zp}QdcP_=N0mD^AN6DC23gdZ>=4FB!X5d18tErzse-DxQs0A8PQmtSY|9$=_pI=El* zu<}wa4jEOWjtwyL=%F{0$!=%J=-=mH6|Usns*A80#8-?6@)8P15W@Os2@$=JK9;n_D1*9Hv_%k!&|Jplite0l7`>( z2U;?hWLf%@K(_9*QC1nM(_*Pn&X z2ysDnlYWF#9sh(#o_z7pFB|GtcW#V&oU!mXX5Jhx?J#`1Ju>4odX#$ArS6Nj`re3V+D zL7b?m$?n@$6$T+OG|sw%=r^PzsnF%^W@TrJ`np#n(MO$=Q?i*Qh1b@8>k1wVCYtKc ze^g3)>w=$s64~OT9F}y!OMy+h4*>4=HtlllA!Duk(ScwK`Dl!0u<#oRjz8_rr`^vs z*e$H>`BH57>$~Lx!RT{%&o`%@%LooYGKsdd9g@+BSJtU1M|j(;I7=#n3ty8tD0Mw@0Lz?UzoOHi?c?S+j(fG$$~;pgU~7~3XcPL|6&y=Cos#br@qaL6!; zU;!ItUt#Q7j?Dp9LFH%G!sM0~ZZLZ)0Ir48j)Wxp<$q~)rnijiT&99tPoj*fD0*MH z*$=fk?9T0BshnE)?CPVpL8ss!g#q0mdsp8z;`zdoxZ%#80ay zL*o?+hOZWz1T%81^v8aou---2Pk(teC1Zuyd^oOt;sxk@+VpLpEEoUK{k>P3S>1Tu zn{sexv*)s6M4o0GL!psrVV!x{5bSLa36aJR*;r+#gbeK1!%|>x%fr3Mg(zbBBZALV z%t5E-PjMG__KR$IqJi5_HQ&u6r*X@`v0@w2QYUH6i@ z*nS86n`RStz*^BGh8;!n>wpb!5mM0W3v$yS3>3vk6cFo_gxB9F<-h5wXS8_uJ5{2O z{qC)Fden+Me6H8|BRm>1;tI$LS>sOuOL5>;kR-YkY*COJ=u?3GXA8C_D$fG1kn9a2 zsM;xgiIjjdq%h)Va*hOPM+-ovg~meEBD>nK?TzF$$dvluA6;hi*CYPt2a1vB(;>sZ z&jI4^Q*67+*~}fb4XDDO6s4s8WV%YX7{O|>l=Yad@F}AA%+1cikf#*y8DTFhF9egjdP8(id+ovwKTrxR`NXMUARwq@O_qag8vrqQY+Y8V7IQo0z8TM*V8vjO?S66&FyWErqP6(wxk#v0>g6v+V^{A{ zx@+$QpK;2#*L^-Ma0RaJo_=%=g|gdG;hyaD)R$9YDGcD6_cj`*$FB1yh|5)&=d7`U zB-sb#nqw=nNf5{ehBv05oxW3TZ+-%Rs1h8YAiw)ShU|O4WF**R1W8isT&;oQAVfYu ze$t93zi`gC3<4__BQazcX1#^{2qVdN5LST+Gh_TtMcw){`ttiv zV3^lBWt=Mg@Fs`uUC;z9H^C4*ZE;=CD)cFu=$5!LzPAAVJXU}%_1nMEsOuGFod2n( zXNaw+>6Ah6+){OTfIPvmVWi6rsFK~DX$cC?%r4jo^%Q|X?nCfy;aO0e`p;t_ePyE# zj0N00y`oGAdQMbQS-7>OW}#XR0wzupmn>2acoZ}C6L1of93ckdF@J~HoM*eElJthY z%UW>6?3vO^OD7j4u8x+(ievu(2{VAwQ%)GuX@LrXqyC78iLO)~Jidm7`&v|1dn1V5 zd{d^a(&jy^imk;%J1LPN=QwCq&f)#P4&!=ODt3>0(-2y4{+?B(VcM9|O{hixvHg0` zhN)mZKc z?M&}qp2Q1Z0=}q>0Gh(XM~R0bK;cGv=3p3v;G>6{u|X+V-+rBz zFW&}hfQdWb*x;Y1nVbL%44Z;43jm`~^a*MWJ0{qy6KSZsR3{J)|NKf7a7N27U}H?& zs6SdDvICpUOiW-SGKCG{neo>oV_X>zKpJvZn}ugQHz@ksImc!<-83pEXS!xS?S4rV z%1&%eq~+CHM^1VzTNl)oh?n8o7ubYvzbj8!Y2>Xh`9Ko+h@Ob0r~puxahC#ZK$}wT zPzegwDd-}6DV|+*F*VB3`HLgE&RJ%O(}8V4c!XSI->u31LQ?zOv=>QIqIIlJD~$Y| z3M^o{Ae%fAzf18Rf&-gEX+fKYu~ecIDFR+$J5@*`JBhl`dn&~v3W{T1lcI34Pi>L# zZvlJrI~6%vaPL;D+fx=G+2K3YE*IIoi!*cY%Ibb#HPBcZk~+`$wk0rt$XF!qBN~F9 zi~jN0Wgu&zszlHQB?l-lh9GkjR%Ddj1;LBdK*w?@2Z7%SoxA`tQ#v4|1Ei>*TLZ51 z-&?Ey{?Tq-oM44IUfuY05sro7Xh3pas~iO+fM5lut$)`TIuRQP{dw^Ao;-wEO0(&b zAjXeDR`ozi2z|Y0px?^>tlz(W z%is2UXJBV8NlNpd44E}SjYx#f#P1CmWWr1^6pRuiyefOcg;+N`(mkNlGhOkbIiTte zX3>+eP^ep7$*U*|@);GDdrSYU+gEqjDpFJdaUkW^qo{35_zVoEt@t7E(5FCNZ&wI| zci@>Aj_3Ye1EZBHn?t=qCr`BUr+vAJ`Q{S{)1*_o;L9`<<*orquyl#HAMmihwz3K0 zw$(>L)fXY^Pwu~*J&@1!H{$arnm>znl#%|pW&h)D>(6#z|ITL^{!@Itsao*&fzKHr zEi^G`YzDNPJ<=bR>m3X|Vds0#i@93e*79WNVLg{ouCp-_=OkTQ^Y}4>ASbeG_by<~ zX<*PeU=kktSNMP-E(Wps@$R||TzNdMWMZ{}fqPOerbb%H$YWA-w?jWhvpVv2;i+P# zLqd)(>9l7}5$B4}K2|(xzg?VQ5mg`$br>jftQhYgAvRmt8@7+qF#^C+TWjR}wPV$u zb!)}La-QF*P5>qQ-NPZcFXQDBWR_GvAbbd-VUBTNvtSd22cu+?wJ7JyY%HGbW1DSP z?r_G$Q8|V<_x?+SlkA~WccU>g+b?N9gxw}bl$vmE3U93PTyo3tw$?@WdF*CdiduDR zsT@k}JfC=G>VewDeL5+Y0)cib1kOTKj|e;xM03w$-?Rpgx)4~tRhYLB?6dp1){GZ7 z46Okby3s9g2)%LBW0iCSI-yRIlUoV@PNgbn4%9l6!aC1;m>elucT%9GaH5A}v@KIp zT6V-^X+-I+(d&@ws_h!5liedv@q0+Fxn_i3-R_vu3En{OBR!tG==fnJRhNklky^1b?w6v3tiG#O-tpH%*p6gK1*vJwU0|Jq;I24t zi>b&1$Xpb%b3>#Pj;)2Pxzqu7?VUS(!E}HO+i=dHcamV_xjScoY%ao-lM(BJ3#p+w z30Chv-v4|n@!JNXDt?N4WUy>!hy>i)u!n)8kPW@ERTAwFlgqfDTn?Ylu^%Tg@8v*? zl2huKVE%5zo(zAvGBq3VImxlA)H<{Hs+UDsJr@mFTqV^^sFg4nI4At>>LH?a3)dXt ze*bHnSL1sJ=|Z(bX>9#Y*kr@8NQ;@QhLevP z!ti&hSE(pCR%Z`gj!h(-Bg$p_dxojw4WFpSMCLCU8V82ws2^BQCcd!<&$bn(E--l$ zr%|jFdUxFW>_ou~V+b!B(I?Yi058$X_=M{;G26XRt@T=2?{sC_2&3eh{EY24-r>w- zyElrK`mtBeD;BfUq=gY!ZR9^Uw7?jLBC4O+3b-dkOK%o`b2K(8lV7{lq~S~$OUYlU zHd`rAwA%W8FA+p<_LUMKw2FH|i=>qK(F8&7)$UyI86^F}9kT}c zj2y*qC)m`5%+*ho=L^YOI|l1JotS;#&evJ!vE1joTpDR^tO&c*&N*Vb_@>fteb{yp zQ&fA@{`Uh6`{YGp$|R%`Kkr^5a<_1)wqzjHwqFrHE|&iG%U%AR|G3y5k1NkmWx45KuneC6 zAC*jD1tn875mJ;RVHvMmA!kb3I3V~{F}PhB$r!-mEC`}7B~)ii2C-KvzqIPVEPqe9 z=t0P?US5%8h~Et$aZoxmk(5X#P&^jXsEOlv#)}Y73Q#L(OXu7iQ4R# zRX<43AgnC0)lbndSj$2@D?y~%>wRT;McPb8oweVSs5P}-A6Lba_^;8eCk>UeL4jcQ z4Zp8yJ01GlWsaApZq*uw3iG|Mtd5>c>EO;Y)Htqg5EUK58&76{H^xJ);5!UU<6Aq7 z6e)F*ydJ?C;1y%Fz~M~?HP2;GJEt~|gc$du}JBBiW>w)dicXIXP z!$*}3biyEZRkedZ*}Hl9os84t5r|N$*4Mwq#*e+1mW8#XAykor>S!p#hCAA2crld2 z<_TW8V7dZY134SB3XU%dRmGvxE>AVUv8bUqJ;+f=lWqZGLZ z{-e@y##i3zga~387D?ZTE###LyW8Bn#U|(Z$;_m<<7~HAvx0)`u%Ry-jU}5%bQf~L z0k9#V_jPuTdWTU!TKspa7U1lKu?4mxH+b-jKLpHh^8}pZf-4GtXWZ;gts?T{bN}-_ zAb4?913o&AW1PE&AvBTG3(HJuT{d47NjR+vqSxn2%ag7;iCZ%12vln@bI|8zz}iO+ zpAhL#;q^DhS2XU+H6h-$;p)@B+Pl`fHo{$P)O6igik~^Nr87!HZ8V-A8_f7CKh;Ou^EqL16BA}9&)f1`&Nh`FgIeC}IpN||+7pM*dLRX0uC^0Vq`8(3DgxmM0;&DVZ?|(DS(7X$JXuZeCzYv<;Cka zr~s!?+wBvADuCI*Bh5A2owHO_y@)&FHZf@%J(9$xSuV~NQd&hF1q{h-DzFQpv`A<6FwQAT~` zT2{G6wcIjqkC~f{kyE`iK>(It>}-+Rs_0wS%((Q&Z68pJK5#4wiqm!$uzEK6IM|75 zVr7*jYUdHv$z5Limjh^Q4CHNjg^R#ocKYIR4Jmdva^?fc+tX>>gOzj$;;9M}bIbg< zJ-W`dX)FBGWk?D*P6b5lLv5Jbo_{S?DI3gqQ%qp2xOO8VN3aG0Q zcyL1(L6Fu!d0eOtDzqiS_6}(N>s~)b`mgc&|3fAWtAWNefyjfb=t@>Ka`JU*v4Hrf z<0=Q1KIQBO4V4d8HAo7N2H33wygS2Q7qraAfXrNV(uHRfTCjLu9?S%BU`-T7JV@CS zlq3Nf<8*uQ7BTPj%ALdH<{>Qk4sc8wu~2L>dP84&e0Lp0=vqWtdq~H?4Z3}azrQEI z(0+Z-M-&K9>H|O}U*)|9jz}_^a{kr?=yWT*UPiDwsRbHQ0y0rlv1!97(LcU5FqudB!Em_&YEsBQ#`+>}{dX$HAn*k+oS$#?!B@Kg z`pc2|C!=i+{o5_zpUQHg^m-<j>nO3{*E^97}-f{TZDjxqTBkg9Iz?B6Htf4KYq zJ%jQ;c-MSDL#YQ2IX3Cpn3g4^*$mqG$o7HbD%EzV8b^I7Nh)S@2LAh13`TU3ATc9z zNPNbLzpRm)VDAhMPl8h(AKrm;dTDzgw*)`nI7DfARWu0(DtVM!wuOthb&Jdu{ILK2cT9c zHgD*JTm*A-)z%aDrD)0C?snP_231#>5{v|*nfRh)r@E)2g!u6Ype_3=WXDU`Bl(~k z=aFQ-3X~fFj)VEYfT%2MJJu-XM#1~FrvY3tumxG3*cBt4B0sN@2*9pBGI%y@yA$0r zdM3ta%x%u$cE=&t+xPX=q+%32KGJ-a22m{dUTG?T7*b{AkGEzoByy#EcwP}beMe#9 z(iwE}2^|XE+~ocK94^7eUF*^@|7S9z;YX}z##pb?oOqxGSEEP+;w)4j?DRCy8`Q8l z19UIi6KDNsZMl~t+%j+7b#2t3Vz#c!Q+=xLtc#kWc>H1PTt`<|0K2BwCKO;)L^vu2 zJ)gE02)&2gW2yk|`U&`FrFQ@oZ-Ww(NCSiDyAo^&dZWcLrdmfe!sMvNdmDPu@MwcB z=ZhNhG;Pu0feIo_y*2Htgsa418?EZ0pD@?&tvMR#%Q0uUs4BLx1Q@Xi$F@x!aT~%c z-ty)Pu`cCXf1Wto)1B|)b-dLF9jCJaH3Qb2Ql|ix7$2ZI595BO?2!GzqVdySpp_cf z&q@2WXAR@;Dw<(TO9tg~%nJkqc0*6Xl^bz0#^YV@Ff)uwYEVP!&?~OTA_;#ty|sE((fuqr(5H1NqU^^?oJox+zzue z0-W3$KKnJ`$56vbvG66t@v$#pjr?G^4JiV|rQgj3^mij9vrP~3Bn4YPB6?nxD`CPE zF^8^BNJ-N3-WKA6jB)!8N+6(CJrPI-X%Xac?}ia>6GiI?v02@hyp|{Rqj=a(Hf?{H zvMsa#OF3=(HKq^~KfhJdMT$qO)_SeM@mF8|P zG`}&F#V`nKz(T&fq3K9_Ka2K$mJO!^8xBCaQg#l55V$G;Dp|0btsPHPk0i+icbwl? zxMR`5&RyoYS#4$ly^BLbo2@t$;?KLz+8Jycc|t&@#&qj~#Xql&c4OcF^WV83k8KuS zX-uQ-FRML!b+WQNq{i{A(vzd=V^{0%Du>D7=NfeoXqFnysZ_ZugJleoCMGYBe2l$q z-ZbqfIOB8dr2L76ED@w1h$w`DfB-NbpsLQE`Iz+wpycVm0s!SagU=sAcNfCbQ5(+a zVD188M}iyU_%NWT5xFfhnF@+JxMRJG6~tEl_5CL(^H{7B^qnoF<}qGsz0 zo+O#6C^WjmUS!2@)2ydmNfZ0U%Kofm!|2!AZ!5Lvj}*%d#u39Q_E3)&{2@essa|bu ze1Xf_i&En8k%KL2=Z_rVzw=b5&`Tj_B_8i~qwnO^tWX96VJDMaRXy@4%l8q7>2=Sy z{j`>T*f);Rm=b}WXd5pUEUE;G4<*~_5M7;@!!QbSlmqb1f{m&)VO&jC&RM6W-N>@) z6-%rw(WQwgG9tH-A_$1+TDgIJa5jnQVquSirN$ncb=l7J$MSzllwFa^dZ_N&_t6BS z(!Ylb<8>Y?F}qB_=to8`xyfdE@K+CUV%@macVhxCQ}ggX5ZN&XE0bX0$FwT&}W$;N6oh=76~Tt}ACw0M)`119bbTpO`tR$8Mve5W_$ zxMMvP4O6ZXZ_3>=2dF(V#uxrXhVgh~fz{M4*R3l~Y?pt!b5Gdx;M&umqmpIh)9}V; z=zBV5ZXgB=-|7F&UjveO!^a~fS->P5q}-{Iojh0uC`1pTYtSTcg!n3g*=FiWfTxat zY5UIyM_Vwjyc2$UemajzftJc5PFp8wdVLI? z<4kn*S`J?-`VqWE{N}Hs#7HG6ZM!Vt(!q*p*sPWggVc6woSqgu9IQH|9eBMW$aUSU zRWA9r_=t&ZQ=P~AC;7&W1I zw{7bZ1_Aad8K}PA9| zvF!KZXJFf_;5rb}$^1vd#by?xgTt_YeDJ#~*)Dk+{`y`@FX3}F=q&)gn7`3geQFj@ z`o{-|e>|apMfcuck32Y>H-UK{skg>u=zdR--tFTCX{n}&?g{|w8{imOO8nTM+m~L( zE6h!Ln$B5m{G$5BnS3bGeMN$ElwJ6^S~Y|P{*g;(3v47Vv$hU2T4*f__K-mlrMhSc zbZeBdBNJa_KOz|F9vKa9GJG&JG;%7=KKzS1kDWq-)yaLPV6~_4gF0m9sb^4NTVPZ& z=$PTg6K8y_IK-uUa74Q==7FCD50e33>)buXx0n5J3&y1~I<0ld2 z=>itOCkvr(+TSF6fsoBnsVLSeJZx4{`rDU!ufyPfljt&a{@&PejHt)?+*axG*CXzU z-I}hEQfGQy`6N#|Uv5;kFRB`l9_1`tL0QLeiX+<}pBOM!KVo9H|B}^67S=6D=h9E< zeI=Kpe;Vi$C;ga%&+A~K(W{vk|fUTMHp1zs}gO>Dd!U37Y{F?TRQfFisfQPZw6zmQgzluphmPKY63GIW@B(Y7b_ zi@eakF;|!lWU+V-9%e*Ter-3-vMIFb<1}eh_^o02<>xRF$rw3dEK|SXr!DcYIfSlCY9fS8NeA#B7svH%~9MmA}D?<5$c8dfnK;!t$ zim;ZrjKQlGbt7cn+@SNjLajcl_5oSu6OG)=p%~2xM=>SsR7E)*_4X}# zzTz>ezZJ^NQJ|-9;is~5LhkWg(yht}15v&Q>`GWxn(d^;f~UBgu^Ny98436_Vji1w zI&O7}fU0;?>N_YLvgfDND8(AUVYC`Fmq;gY)C_#kiq5(347Kv(fNLfTQn2p8X- z;ai1{6t6kq%;Nc>gRpy{v+rsLI`aM#=XH2>j1cw4 zY)RN(Kgay*Jo`>sn&Yzb{o=>j2|_dC!|o%OIOaBCh+JKZ~O9KIoPsOs45rcwSRY{}`?vih5qVwG20S!3~Zlp~S5O5U!0*UE9% zxiAr{WnI*i<3f6>eIu*O3CH*Ir7a(ViD~XX-?ptq6&SAzOG1`FR+6V6PhdE$E-AuC zd`sHSYm~~%TyPl1>r3z39gD0Z&c)vM7UB9f?InXZ1Q96g+d2tM8DlWz3|>8?OlYHr z*G6GrHv6^hh@Xy^*cftp+xgy`ZF~Q#8lDy@JR9kZ^ZO%6Q+42FGAUiu6RVF&eiJV| z(8n|<`zzymH2Or112m4eMSLm6Il)9PH_~f*v`CrHx$Isi>HsjeIHq7%gT!28vh-80 z6Uve6*4dl(?hdWe*75EhXBT~$E<$d7hILgm0(4p!vZ7^yMTEjxWt<`2f~~GZz;@Cp zslIE=B0zEhxBKsnk%f4Dv<|wQ(w`FH$JF; zVsPr}0c;W#8I=5EMcaU|%UlCGjB*Iyi9YBrgYr&n;-yQlH%WAq?|yl(NjzV*x&7n* zOzL=%xPXI!dH(doq(Dj1Dcn}`p}wNh*MrLzRrV$yNqL#pH?9gNeCQGB5qWfx7xgDd z=%KW*?^LHkfNDFEMQVTRoa%iUV`ys z8Ys?>l{6d!CXo-#d7Td}7`K#IFwD%9F4zY6Fw|y^W+e@d-M2XM(K7s6al#!s|5xbr z6Pjwh9xqhu-q|yJx$})yQZ$0Gh=VB!Om+zMhw+VrZvp&mgC-{J&{xals3k>B_`y&) zI7bi{^rOujtK4Wy6a&LO4V18{g+QG~A%0b76*O z>nx6&(y?~lkCBsnE5ER1y{s{X40*7KX1B(Rm&nwGO-7rKFRM4ny-V&$zLY&ODsOdM z%Hc~)jL6{&`%t_hi`hmtIhSAdZyl6TR#@ARe5qi2xGF@8(o|4! zp{VC7@!hWG;*Qso3A|xs)K26Z_=s$eLRo2|$RwTI;}vtGBqf2Q&Rai4C_P*E|6sUL z0EF+?-2o;2_F8)o+Zhh%P@RU$8UjWE z+%B?B$tkn-X8oJmx}s;>?9?Bv0#ux(=;~3T>FpO`1)6)xMct_ee8w`*88G5spdQS^2n|5iHed%R_A{ue19~zd|+2 z*^KWojb6@*<+;jqN%;ZGKEs0gX3HD{rq{ito}Xc}gLCh~8q`vXGJB)Z z-d(y>*W#&(@#ye}^77a>y6FwCsPbvjsUO~qKQP^wo3VKKV!Era&8r{<$dQ1ho}GF0 z&VCHcH0-g;<{a4_M&4(SdShK#wU_P_i~J4>AML&Qf9Rb;g+bC2Y`B`x5J|vB5-P}v zMKu@vR}Ua)O-+`@d`43*j=j8b*^r<0qNK}UjWQgYIL^zYDgT0L^HQw z481&8c%Qj0*bUm}Y@Z#S3P0&ua8jUtE{ApZnX2wfqS+LRc*d(06$zuI2zrmV)Sc{; zUX2`6#+1U24e8|YMKYWTpgO#AobQw^PpQ=?2NDjj-stoAz645mZDSf;>4v$!Hf!X{drMznfCNOjm27 z-G^F!T~l%3r!Ft0H5z>-EUlWVf99?jr5*yQV<%Q%DJ6L5jnA*cCSYNkt4D?39{*Mu z3=+S0MVqc_W42+P)IsMX$VuRouhcG03N0hvMC~086D6%fR98|jny=tmmRhL#^q%eb z$RfsSQkV&QFZO;|6r$?OBiL*B;qO%U3SkrQWgYmgY@>KGZ(-hTn7U|Ez}wPdljKjs zYm=r=3!c*Qmss*oW5z%+ugRE7KnTg}d-I*@zD_8pNPjf-l`Zl(iOw(ET(*M6T=(h7 zb*_1zTxz7OQf`m$8VoF6^?d$56V8!Rx7D2|6vt^zyNugv!#3*jATX+ z7egK=TVa)(;g`Te*0pw(13!+JLt7!i#;AI&y8(iih#tBAKlN`WS4xNpMjBl$+~m6u z!|%#>FWE*!*fhwyD}c2SJV_pI+q2AgEU=^Q1pZJcl2%D`(hJYORoo~%XknCN^0M%l z)7lHEq5~oKs9}}ZeZ3J>B+t)iY>K%;9~g<%Xk-b=x9~ZzkW8B<)ntV^dxa}JkLg9^ z)c76h>sMjf=zXQmPt3WA@}Q=rzrKk8W@DGb5zyC4B9rfa%DreQd3@;XKKa$8&GtVn z21c!Ow`~DkN`_xswHN+o&k*C*{J14dIO=}InSCIk!H{}(5x(9GT}4sK zd>Mc3yDm<=lls!V?g8DNMD8Kj#t1n*fRY342Z(urTEr{*)n9#(`>Tefpt93n-~AY< zzsBW<@cbnc|4^R4Wa9rhnP5O4DqWVKUu3Nrz=A#gevJL^U8ovQker-l{T)>L`j;*g z*R5yu&1YID_&lL}DZZicF=+?qRj#-QDugB6`|~?=jome&{mRkgDYc*5q#q{8ZAEi) z@3v&U3i|JFE^~4LloZVQ^}-SS36N0EAve3w*}--|Vt?YVyLf;>TnH+fR$=#m`s z$ov*z%XOrDIF9qCTGY;ko7a$qRF1l^6OND&02geoPFfP_HGJg?tb z^Xxglz4j{S&t7Mr#dYNefww$;jCpN^xFdVY=U%XErYPpec6( zn{~C&5 zxm%umcu_v-7wxf-eux@LpE{p+2JBw-y_G8P1PijnVTY6QLW^fRHdE)35Z>N4kN(HZ z*R!)DA}zGa+9+vY&nia5H*hU|)E_jSQcyk2oK(+k)5quAUY~j9lxuYM=yBQSWVMbh z9nif|hg0~GWs3@2Bc>hQ!%71WfC*~#VkbgF5;&GHpvmnE#`fZUuJbKIE%2t>}f9E`kx^m*{>zmBMoY zC~5T!&`X+PZ^?F)x7w$O1)WG%fS_9as?EsTORi!$i7eTeVf6N*e&S)3OvEQ%X&o>k z>{Ihez%PM1A8lyCE-xx{vlUUXe;DNGxc-%MiV zhC5nBErp8QX=pXMcD?V+U0pthcZ9UM~;rKP*p(y0cP)_MxWa2##&r4fuoK#75l1e7VlypMfL-0zyqR4;$3k{&GHsGasf z(^vUR!eQT}$N4nmtXNa>XN42hWhmyL3ud$ET6e4($%Jf)4^8-khO*oOev;K)nql>CK!Nn#ixA zP6H0nSN_920D?{$B@DY$!=}(L!Q=qo!I%C|eemJvF7gtZh_$P4PTHB1efY_ekB?XB zRAM_TRS!5_>}HQGgYCHg3d)xkHy5g?0pt1?GKg^0Ka)cqx;K+Ag>X||0$_#-I`Zi* znUfW>_Ez&AYnPnxrg~&?c;!X*nPCX$(A0jUR|f#2-{rYn+Qfb>j&hw+i-w}7`w4^J z5HyX^73BwINOqfrE$+#Ak#Bt|m`~!dnxz-M(O5v%;`Ck5?bw}DyHIwlfOG5yMI+BD z#plpqud zW=}IxA(L3fA4W7m*El-@7->b)p550aKlY@8>uM=+NRM5b;uxh_dkqs}a=~X7bmY!z zYS-Aj;jG3+z9B?2?EZ77bPWTk1IAD$!cC$n=?P*;0XUnrl;e#L?1NxlnucEa^OOqN zIv)?v$b`9lMl5;? z4SWQ3DowZ~SR9-xiO0*vlr%uoKk8V#I^Wi2qopxY_7{njaqhEt8l5pBWllS1O+zhS zieE!g>IF^5MRct_jG#x!Xfs~41xN7%Npjc|``s;md-gUPwN^TWuftM2sYXju_1520 zdze#$%3G1&3kZ63aa1P9s9b?WWfLoD7?$kB(AR5*bSuxlZ~4Fj54L z2~)M5353QRDQ}cmpQ$A0+YlSOT2?FTVx<~qsh>UFl57))LOv%vvo3s8%f+W@2`uJL zn5JSrd~%!s!v)4Zu&vOrAa-N6G)f%PQ_qmUujp+L^zc*CCs2H3tw~M$LgF7Z=A(~x zl!qDB9*$S7MDj0v6SuFCR$yzUt77I%NUGcA3sE5=@oc}EH3JK*H?jE+fV$_}4%f?B z2fd+ty-h-?;s^`DI2x)3S)wRJpID~-8UR}IiO){%Zy;-3592irE9?feO@_fY8)YyJ zBR7>Y^ByNXG#7c-pXZ_8n5--}olOuWx|SoIS)*qXt72u>BYLKMt$wOzRn*UY4i_?j z8+BY)iv%%l4;5dwvLrm?=>(+R9>dFQ@jVX0<5Sjnv6dOn#{7A(_TEV|nTNSIy;Dxm zypYMYto>yZ0jfd$BJ^$EGO_66By# zi-$c!x{V~Dgm8y(egbI5PCTgd$qYoBv$ef#+%I@5_Q$*))c+WTR8diBm5y#dRwwd(g0VT?Q^fKOEI!@n+sPSx$sxu4G9*M zY;9F|_-rqdhkWK8G4o!nt{{(1`b$;zzOYm-2Ypc*(zHTKC{h>1Rq0aI}^akvDL8 zWcKl;{_p5|_CS%~=|*K3np6qBW!h9&O%$ z+sVz;mf7p8ztor<@NVT@61Xl0-TwXghn+997sJ4B%s7Zl1PvS#JBVZIbo{7%kWt{Z zG|QrAiVw&su%|SP?RR56RZUAT*H&dcxpgEjqAIh0sUMB(WM~t>X>_&l^htr4^@?ra zsQx9Mm`7rbv0oi}i*%JP&hg94PM&&vEwwf9gkp+gbslgax$aI6F5W8eFAw3xX~$xq zt>30KXIx*Zj9gs5>XxW0qC5s9O(8oMXo!Or#Ms4TW=Php*2+|W0g{QwQd5gqBS>AJ zHcwjdv*uU&($Rm^RQ_F8`M=DE_ABw;t^;xk2-tq*ZaH4j{HvkqtTjB@sn2;o;SWH8 z<=-_eRod9K?MppuRqRD=e3{-KYPoy;zm+`KR-S88y=9MyH`LqOYS(=d$z?(n8sUK zJdVNJ%cW)C+YWO6IW4yqUb_19V;g-3vs$t;rGR<~P}M0bCW^xEnM4?&M&C}IeRsCT z+um#a!j$6~FRA6NyX)#PFzR+<)HuCBO8*s;zPLp~1@{9P&et{yb=G13$v->j z76GQ{bEMgpLwj>5^pnzii}58_HQr6_`o{+TXOsU|xH81dr`tL2Z%l^(;Y$Drt(3Pb zL47Xu9G#A-&hq%eC*nr`gU*sAHg~l}>d1(w_zzZ4sWwXIHxOA` zU=7j3&@IV;EhhZLC+3Ij?fVOCKl?wHs5Z`88>+h_pFE-?nBa2GgYFnZ+^ir~=b+KXSD>cWKGEtxO7jLS(0H z$eCp@Ylv1FCNRu@mz@~Bq`VGP?`0AG0%aL>Ao>oH9uE3Vf!waVAQj|@y1Mewi89hq zVEJefZC2oFO%c4MHBPA|x;vR2?%R#f_*SW@2C4L9aq$|rsk62Twn&nkca*uQaQ;on z-2sH%3D1#m^kN0_EIF|9=U_fj!j{^BFF$M$X8AS` zT|e!7wayb7uuVx-N7Zxzm2n?0aGR2a;3IY~J9f82dxYhQnU&C|;_=)u(&@@)evz^x zO=H|oa3);rlupGme%jjyNla4t0E5f$Kuh2zo;$6|)8IIMCtfmW!tPc4-}mwbr=Y#>I9+V^s4v ztghk-E%Rp|Xd;$5&PFOb@CUQyxmpAA;>tO&atIqR-BLdilZ%J~jyU(uJYI(lATW-a zhGDFqw*X3@9uD6#Il9a%pM{IEwel5qbg6JYOQj{<(MQ~#1>V+@D!c^-L}E+fW}R7m zMazyHn=Pn#p2(Y%0sFIa9uoX1xjT@I>5F0MwB4!OKR+}}2+M>5kGzX-?5RoyohB>d zSUZm+0UDf>&k~DJ&~Z6Dx-C^7PPjT*@)&BFxK6ISVDsgwNZ>Tb*iCknU0rm*;!cQ}C26JP52y zw52lE;|_alP?1X}Bd4GcR8#0WhopaJ4S3lX% zP%QJ&v}lMN@p5uc6k8W;?IcER0C*N?Rjx|T~~C)dUF!nrc!2Q#*L;jef3YuKYG9u z?CrKFt0u$~gI;_;b2<})KBHS0qJ?LfN+3Hlj&)+Pqw1=28I+bz4fix!a>!Iir>wMS zoM~jq!OLcz<{~ka<=$WD^{|+%Se`bp8zl3D7nVNTxza z*T}+XilH}qmo7uggYMUH9NB=9jb1DTv4xnBwBQ=H#NkF-E)#oUkpi=iHbLROlwqJ7esjLY-%c=P z3zXc~kW#vdZ{gBN`S!6pMF({Ej^j&&0Iv7 zW6zj_89^!Qs^uE=y>Jjx_6noY10I<}UBR#P*b1(rB9b;RNp5P=C1C_(@FCX(S{dQL)Alc3RLqB#3;JK9ZQGXC$zN?nJ{3c9{~Fj z&@N%PRa{<~&p))?)MzLfKsUG+B!7i*^yQDCC!7gi>9<_Dh?yi2;BohM{b5nLw9$mO zI8^<+&r6PHe|Ua`=i;no-sev;xHLPRYKz1SB+o_Z&;7hQG773)Cv&1ZkV4u3M}k$E z^~~lxPja8ixC7CRdTeW)Kk+tV*V_bAm^yP!+cn9R*%IhU>3p;j8UiCqIz|Ab3UpFD zNgI-T?puguRj)I5u|G?CZ+csv+e?i88_RpWV%yz(@;c=m{*{0xAC>U}Zt&Kawgi-i zU%Y~!EHhr=FJmC-Z1g@|Hs9Jp$>330$)hVF4}PQM^!f+`cq^50_$@^JFxC%tl6(bk z7>mKVNY9u5#1D?K66!b_cNcbQ2JUUfN)|;=lWHSZZ*3~zD^G>~b9$x&IX{c~zdDZTPZyXKfSw31B3tj|L?=RrKtz@=nfAAkx z?QK9YrkP0cHfK;*P8+|J;@V?&AC^{^^IS6|bJ2AZ(7b+*kq!z(G_m-0^O%y? zy?an2m!{SR3+dtF*Qja1lcm#A`t>zuuK)+QdK|fr0-%u)vv?{nDZ)cXNV@RPj=kEK z>P&6Sla#|x=WVCmsFtNqKgak%@zW>zH&X!4->HQ5u8Pg$QmUedGZEtW>jA|Y#QBZm z=$P`#_4r$HV^UJacjYc~)y#A%EXZXsy%EfPNlUWSN8EsbaTXwE;xd)3T>?YjjbtO% z+TqO`%KTl6XSCkjtlr=;g=m;ck6*l)VOM%8b|Aq8UtRcn_K-n%CLP>kBG;naIrvBq zRc_q7-s$bEa#0&WCE#8*WTiPPDC6AqfziGXLw2P<)!wpxQA;8Q>0=f2oCl1n=kd3>eXJmRdQNL~4>a!}) zjSV5--=g@@N}w?v1qJ--xJsi{a4mjD9}mC8Do+2Ah%J+ zFi=e(nUe$vOX0RK3(u&EaL1l`bz(H0{u+#1Um99CGt>M2bwJw?uI-L4lwC^wwPDti z58b{r+SNoaV9znZMJH?OVp#MnaP%>CtS3VBCIISE9=8J}b33rHcxW#LyZpNHyz$V@ z^MPjbj~~;1qM_W%NAraIHlmZq+Mr$-7TYc)J=s3^Jz2K}HLj`rqy{obc~=VA8Puc| z-ne<^l7V=TN`jP=6(i*|&O`V>g!nJFYZ$cSusi7=9DZiyzD77hD&&40-Be}c ziOf=^jb<)Bd7FOxrRBa1&XCG@hjhc9I>Ha?35A-Y0PS~IqRCP+7b=@8BafxLQQi9^ zA;ob}iq}Y`n#SRzfJ>rP*q9gnM)ETd?k+M$_zY2CQI3Ud{1tHVVjVgB7nq6@4zm5c zgg($XnPgM+$ChxbIj#MNT>&1$tHV`+Ur&Du_}UC%#rL8zwHQ)3K)*#`^WL)E=5p06Z{e z6WCzUv1ld~Gm)c5SZV?x@H5W~f4cg8Me+2n*h;MM+E<1hSHqSU2HciOVxkuW<&U64 zUO++yfW>y1P1klfXakr6P?%Db$fSoijMKaxHE25ib$+@qjVYit<75kv?~vI3QPkVq z;nr7L65ytQ;Tlv%2|TC=Sw9j(7V%naw*f?A+B3ViK)m0F-C63UY7C#$en~528*op< zUXF)xG8Xl`&7fuQJOl$8(Tq&_WCU^ApQH`X?##*yZ@VKLgA!@1M>p3ryN_qxkKxN0 zgV@Z3j>$fFd74gh1z4GSCI3pi>Yw9R|Jv{Wv6$AsDE<7K3`Rw{I#bZy7bYb(y&9J~ zWS=F0+3uq;>^L-q4&Zm~&it-M!Gs53i4o!y&V&#@MrE-HxjODI!(=%QJBab0u0N7_ zE$x@y2t5+5HB|{zU6UrJ$qS3F`IUa*XRml&YQ+Mpe z>SSO=wwrN}zF{qFdtcf~dz>(o8~|s=IcEHi^tYDM7Fz#-7@2A?bH^l?B8jS5?`q>}Ri42#$E;>T0|B&x{$(`l;=oz&>f^ zv!c-J2p;}hchu9T@m;{h!X2s40J(=lETGauyxt}U#Gkg1Bmx>^&%#MNg6tB*Adl&7 zfhGxly1{&0ft9rBoJp5f&uE3Q)IyHe{KSVeSe*81oSJRRIab1|37;X zZA}SG*b^nvKYG#jQ#}839U4Iz$%)(lx!jQ@*>@z3mxVh?WGD^(elv(gkYB6qFz=JMM|{0oK~HaT zrVh~4AnHf&>mEG@FTO?rJk~S#2+YWH&Fho=?mfG#8xEj4!-jp^o6$GMoySw+`JTP` zm>dLZ?ej^SY}Z(l+jhd)UMI>_ZOwqf>q74>u~a?Z^_%s2BBMh4!R*SoOPzh1mqJtu zYsTsQy_|Nb-KdTwmZRSzG!*jl~h-Max98SQ$~|Zv2u#EQox5GOOshf(_h80~-I+ zKUlKdTNK@7yDZk*k)(6?n$Ag%j~U|Vw=1d_ui z6|7H9`k7Dss<1MF2$g0mn?YZ7q$+}5GX<49OV9aQgKMV9?C73_+NoqJh&b+ur=Z$F zVamzeo*6jZf{N%jn)jF)@Hv^Xu`9+L>Ms){Ef}~0R;YcWI-qn104NA|)5TOpIx=hX z%)vj}_u_W@8>z}cK*95;jbo0@wbSb$ISkLvMDGC^Pt(=m^1zl(i0Est##NiE?*cCb%F}U?l=W#4I@A#~&IHXK z!uE~I(H)9Eq2;Vc)LN2bgW4z;6Rg7B8}TPCFJRxlvHR#AXZ!xe4G}&X+1@QnWe`yu z6yrC-<3M&Gy5s3c9R24)3@1Z^3pN!XWxifs+^z1X5_htFJ;$qNL{fQu)}&Leik>@t z7HL=VmNgsg&I*u<&mqo*s87_f#^qi`<9B2HD-8DUwN32OCh^Yv3~L}*yf;2oQF!Tt zNTgj@pvsdUA@Mj4>Y0xS2BHW7P`Jbg5|YW61}h$}50iM(DMgermLIkON5d;Yj-Fq9 z#j)+R{hRijw8VlXpxEGQ;sGkJa>L>Bcrl(kWodx}o-||Xt`~oA++nI`tgw;Wl3U>m z$|;7`Lkg=;Nx!w4KdkBAK=swM@rBjIJJHSA;(33f|Wk8G3T_X`Z!ZQ2IM6cyye6}4W9yV*f zQ@LaMe&p(roxRt-DtPY8{9{d07ZP^^#^Etz_#8zK0B`p^!KcYARSoTha96*&xL;ha zcf7C?6VHcS8>1k6Vdtc3FeW$#N*ch#W;-w=ithHl*5oN9GkitK$rN|9o+TEAm=^u4 z$~QQ?Lkou?`elALJ1TIc=e&qX?-cQQa0P**d_)2UF(-9&62&-)0KtnwM3&5G;o+cj zkj6CYcv3*drNYSk+#iEy{NSrjd!Gsg1qoF(0E@jB2tO`ntSB?_Ed%yNs zg0VVm@vv)GV~EN^+(yb#mZ_60GV6}Dy|jreP1c|FT1y_W&H**9_UHi=6n7IWK$bw` zl9K^fvMQ#5%7f31Ep~)twQqS?j9Ga;cKjsfM9G86)aZ;FadzGLLPL9)3*FrPK1jGV z0mNfqVS#z4+w_;*@%C#4C7bH$U*3CVjIN~J@fCgEBdkyFBl_a8@#5KZLL@M2W*2vf zVhg>j(Zc+=EITf3u6QfEB@BUb-0+gZn7*EJh@Ty4%lJ%xYb2#^?M8BqALSK}@%(Q=uz`imvQsy%=X ztpd;toRO_uB=Vf!?3_l=u^!x3|666f?In(G3#p2=CnJI!o;xmp%79=ESEOhM4Vp`? zJDDgt--;PYm_%~7`7XB#8F;Br-LJR)HGG;y?k?K?hH8RJSrF&8?2r*qS8zb9$7Koa z@q6?@X94d`Ow-zFQSJ7fjzSq`7_VMG(oML=yVo(*iujsW zJra+SBO}JBs&KU7K8J53i zU?N?Q_6ednZoSt*6k4H*`H~n~V0W^9Z-%PzlUZ!ysAA>imql>UurH8zt4iiL0h`WS z5|3CKcJ6s9UgeCjHTF{azOAY3{(iw^O;EaVYG7|rGbT^g`CNF=1L#2mkRVV?X#iGN z&b$<*vdzi2Tz{EGcH9UxemeIUQU6xATtJmRyFw)(>x_)M)3=&s&EIg15!H2pH%lPGmm%R3C+wbpPlreaVisuA8N>)c zs1we_L2dD?JFVp`0VDku0V;~K0x(fSuA;2zCYd#D%;oT>%n;A8QPa&Eb#6ws^}P1 z6hZ?x>+ywtwF5^vtLH4{d~Z{oTEZEt-G5Tu#K5^XFeh~g+c`aO@NuKhk>Lkx&s#blXpD5emTcs)G0JCy%W z7fPzQ0DI6@+wLRs@cWPA^ov&qs#E%W(nZcwQNOoza1F4h-`XeG;EN+Pfm*U=L?bs` zZgR!OUAl)diQ`b7CE{?3Vhp)P1xvHDl`_@_B-bKwCT20f`Rs%%jziFr@7UA#2@8+c zYw@q&ZW%j;En1Cw7bLd%u2xmD#!BqP%NI9%zgC{%BFO-A+xiC}`9{5r=fAcy}VZVu)@w=kXbfosUERv2cPYVa=+R`m0cQldZmcY~9 zOZjkEuewV=C&_9AFKGWje`nvnZJnGa^fsm8dAQ8FK+S2X0|Kz5%83A$ zdvX-a6avD@bw%_7G+)56ldteR?te{?lOySo?s!`c&aOA6tx^hh-ArenGUE?2w}Esk z&~&R2KIx@D5{o37Xj+%U3j)(tjzBYwr;)YG!Ml64jR=FCR{c=Gg+g5Z?eTm*BCLuC>mWEVpfeqDSX474@N90F?Yy3s(kLZsRUn8yB<}u)nveJLrhl8Kh+XQL zybnLAmvMwv+Iv&bZy?m16#yHA9O$QW##=-Up&F| z!1jM7yDOIk@BSQ(QP>CEdK@V zm{7x=_R~; zBg3|cbf)>P^@Q|uHEF?*chT*@LRdB^1tv^2G4_L1jxs_rG)~44lUUUqYG0vLC2PDq z4mevbZO^C^H&60$49D!UU#{7)pXSf20lX=5`)gEGo>Jzb7@EQRVwl(3I8m_L z-vacMXsb7RAn7lVV=yTd%e`_Qa!!r$;x!tH2IH%T$|Lr~{YA0pcrfNPs(tL;H`G|h z!+Bl)>gE*g>tXCP3N;Ef{W(47bk?F}pO@sib@?d96FrfaiYIs~vb>u%M$eKGkWl^cLoLK`W^X1MpCF;!=}1x&;u zOUzHEKGdNR3ckCpM|iXxLIk7GIl>{J1;;NfUQ#!3vaQ8>F zre~gy_#XEaSn2n=LBGxd$2QuS%IW)d#hqil6Ht8pxxYv~ruxq!yCgBm0Ca*}DEtR< z!inn#;3f3#7&20Ll)m=A{~JJ){_FM$yTo&x5K=v(l@187eZ1_q<&E4(MMee@Uc?J$ zGkaV)vB+2?72DTu{O&L5m4C~Ud2=ZH&uSp{;TL?ryS2*wg_+ztbS5%vQ}=hmjPJhU zBACnx#2k{x>qfXjq=_=ig9|L1nb?O}^BPT&JO9nX@H&3NsccSL9p-nKobuOi6HLvt|wl+0Y#J>EPCNP?QiGr^^H za1W9bAa`gC0*kD*$Hpyv?MOp=I*?faH7=2UdO?0l`%#`KoP^!0G)0O!$WpSj73YY0 zi|BYPl?NVSh(km#s^NT5?0(a^jFpG7>oZ}6?4A!@JN{Cus_A2b`M#q0EEhJBb* zFP&|3d7)`WWlUU@LUV-Z;!d{%@*vb|yj%yrouzBN99_i%S)BiD`Ko4oJh;ZeR=(cP zG3S~Q-CMVxaSK^3BOS>zW_{>dvuLs}J`b~yNWDOG?*eiE!dmK#kzI>B%ZNYV*L#+z zQcc>NKh8)F0{6&B^_Ka%Vo2`wlWh`$ z0Wk5`ZlWF!+f$`t=2z?1{4HH24}Sp6=YlpCJbi~F2U(Rq0mZ)+AbeqTr!k0U#&rnD z+kd2C>+-d>z)OVwUm~AirLYS15y+XNlU9 zm5<(KXk=%HvY#m=Db&;%jVTzoOSOgTDw8600Lica@*g4Azeqt;>UHHk-KVz5QN!w| zCKZ3oJpu&KjYj@dSN%6_36(aELw~tr60nlwE&KC0!Or$({SFtV$gV}uOcnLY(j^Tc zn^~`e-S7Dg;qznj*N)+7+c3Y}o2h#8&s&;ecI_iz6B$*dkeZvvcAvrn=a;T8?0Ye# zMBTl5XUh`VplJ$}KD~lmNCQB*OOOQ}Q=1`j$~aJ)CXdIj0($G~TACrcjymvd(e#EB zK<|GzKWF^DT$R9PJ3EUk2GtHvip9 zlAG7#0e6??iLsl7X+5G=;f=2XG(B=)>SK7wac5f6Z~ zUjoR*xlu7dvFj$jqRpa1T|3Z_4< z8y1c_cu}gCU`Iz0RB|3w&G4^x6&{XO*AkEWHyd_|@JMZRL&-AxpZe}^H?4L0l5Cvc zHv6}B{H?dNvd{WGHRW1c_8AhT?)e{-SDRu>ygaY!73#S>>Q&G5@)I+2G7}jy z@@W%PbDzYRHAY-e6!dxnL5BHdoJQ@M2ZQewg|{-^CNG)0el`H_%DNdKCenl zFQ0}Z^=s|}sh|a#0S%)tSN#R)@{-oq;R(6MbQSl;sM2J)$zM{A96#qTj(h)_ot2oV z*m>6yXXIL&aN>}yrP?A^kGV`^LuD+ zB%b{8vNTCIO6XkUTz_aR(-SF-A^?DL7 zt(l7}IbuJl(?DQqy#?WK=!kcZ(!3-++jE@QkgLp8vR#1~ zzpTG*H{>HIzbg`w1ix=ry)8B9N-0LVGlVFY5x+PJ6NCH`PwbO4?zOAulr+}1Ev!;< zmmC#c?(QB1sIjyrxP@s&{5f8ue?D^y+?^|jt4cVZwchnKy|P%Sw(v=Nd8tCdXXZeL z^4l+%^pu{IXx;f1&3xu(37zWyeEp3$n&Cg++waf59Lo<=ME*;E{@F!!C2yG*{$-F1 z{~Y>?%a{K9rvI{r{>Pa7cc1=$a7y_HoWV55x;H-l*?r;V3fs1)O)uctPXI@(qayOB zTbKs=FWAaID?a=wn)M%%bk)@BLD%(f?=FtSa_7;9*e@qC-Nd^dJ-78Zv?SmiZ+Kf3 zUXYpVNnE>f`4vc>muutcdP18BCaT_%Z8MPmU$>;J@Na_+*py42Sl#x|?W z`hi}~aYrKtfHUHNn228 zD72ZgPek!mIK$5&%7JnI3k*?63(kXYs$49 zwm1&DUy(l7IT!B`U!qIzP{ptQ|Q`WYh?{q;XvYUn>lpx7UVQgx<~2YqIg zlT+`A1yr3eWLw_xxhl;`^a@KLkUQ)G@M}zeYjWlSXfXMF_HuDo8g5M^s@^0XtFiO{0p$7?M=?T|}zgydX!RV7g;>#$JH6dtJ9nltV)(sNYRQ^CzAGrlP2~n4BF$I9~ zYNSuOajWz7oiv*fLPlc2EGl?x#c1djCh8c)dT@sNlWM*M!0|DfmKgB#dLLB+C)RBP zeTs+<^>I>f?qr_XT!aZxl)tII7bDG&$w=5+k(&WJvnAgFG)%}58OxVibQPxoiiUJ)+(F7SZeLZN*Q3i!bO2vSRo(;Nm7$5-!F!jqZPts(A(WWS!n!Qtguy zA{sj2-n96&1f&N!DNj62?Cp_(5M=I-+=gZ=MM+v%uO>}nV^Z>I1<9)>eN=l4Y!f+`cZ??Ml0+(g(3|o@)Qi!`CZTwei?Uiy3UW2Alvup{9L8`uV=^4<(cL0+v z3G4!tvFf3!5>u8Wm1m_Yz`a*Kb49)k9NpMlg>CP6nSM59UwOy`cWq4Z?klX7lx(;v z4tL%qE0V0qCYfC?pa}U0d*+-}ao1tR;z^hmN7w*R>m55!6 z8O!sbRMjJ6S{%D z@k!RE_g~F`I8YjiH^l8DP_)4K!|cz-T#?#Wh6Q?%icK4rI|j-^*N$MKsKy$|a{!S% z*GSTQkzqJ=`d*P#%ZTHa#Cmsoj>(+{o!7v2Atj zyyBa-w`}EVFPkW552m*sS?HYbi6imH{i`Z=H2MFVzc06ErCbLplQi*Luf;r~{G`j3cd3KT*Dv$iw62x;CK zdq+3ebR||SMboGRFe9*bo~tZV!xfMVXQ-UJCnne%b|Xa;Ch+S1uzb^}S3@Ds*=a)RX4{{MLGwb8T>?IT(CG4kcc1?w zB*D@I#6%ME4!e+%h{ql^=$`&Z4}8Uz+Wlb?XhjkRN`>^|H|W1a`;?lnJBK-gvbPR_AUQ^L@z z-|vXJ#qvJy$~t6{?VktXqJAL18kmtVV1RL|=MDZTB0<6BVH|lw)W=cMcEo7IiC~hiDn&!SN?G@xlQK2%wnqFy5H$`K`?j8=a)v71F5$cdt(!MfBcAnIh+z6Nl#XF2q zKV=+RDo*Q*PRh@gSFGFi)~F;cZEn!qG>&X^%zOOgU1D(3U^TEX$QK$xzu3~KL^FV9 zdu}%Qm;nHFLL`WmUlwY(i}2jLH}GP`Niqjlw=omW>i4tWHgOn3#p-SbQr=&3+1DIi zGe5IhP@Q;|^BIB5Bu(#*Aqzl)_3Edb1Plrk$3G~r|If&A{TMaLiN1Ih_Lrs_{^bQK z*W%Q^KM?_PIsP)*e;=qFkAnYm?r?8$t30G7;q{?DFa_6@Hr#Rt)VvvF4X^U@RoPda z2Yl(}E^zTdSwu63g}TiDQskvHcUA9iDaQ^$6@cE$F0~05%C}j+z<-IctY=M;pH==r zvz3r{eCBtg<;gG5CI@Ad{J|#fUraKYJEw&15+P4r``$lH^?`8=u67lzgofpm6l6Fj z(Ega}Me$NlD0)vS(|8-Sa#$w8rf7Utj|DY%%ZmImwo-W2Z{LUDQm=T?PIH!9T*QZQ zpdSnU`8IdJLpIhbhtIBz^MX-lx8$i?8sQ9BMy`?$vMUYVVg$QjPq>Jyn1AqCOb+hyTAH}O+TjHn}uE8_2l9H z{Ge}fXQ@6RIM`#}-3cZS;ku1wYjw%r`JgRFsim^Qox2@G@CMmutE+6`&PLSf)->a> zDsRkQg1numiI1QGt5$xNn&$f#3Vrj=rxLBBP4E&O0EIPT$AuV=XNUVq)(g3P`RO$ z=yfPORbepPr&S|Xl&%}tFMJ6W(S7PFt;^8B@q^L#D#a}G#RWe)Rq`Hv{4p3GyA~Fj zI3)SlLd{y}1?sEb{`SI2#8sm2GAgYMisG$B*EEjR^Nh!Bs?=KF`jVnA=?r_EGRRB$ zNuz$kC-*srzBUV)6F-M4_%Pc|DR3|U-Vk3R9q6mc6EL|H?999=dST#xZC4GzhXmrV#j(m* z)*fSmkzeqf@PJgz;LTc8(+11iuJ`xrYA(yKT57~Qi~3}OYx=hbm$vK!b>fYTPfgY$ zOFiRHtq!0GNo6jRQ;|91b9`B2tCj!> zZn2ymzD%uZ+3Y9p!7kFvCDfEyGoA0H2};Oo1aE(18Tx2aF(eXkBhxZfWBwt+K*3_Jio)^&zU19N_{wVg-!9OQT(TXGTZbckO6H z$!L}5DqyEX)^DnueZ8C6LJdO1JsZ{ zSt#@m+!wrkn!Z18MxryXb_Kzo*^4*5f>)_Mox=0NnbMzCzU!+(u+wFHr*P#nAI%9P zt`!_&CYN_YQ+^rD?r|(OJdw+Qf(mS%YOdw^pg%F$xf1q8_}tP3rH8kRmQr|`cbKq9 z9<)37*&j3@Z6Mgll-+HC5VaKu&JK2Mzjv{t5#gAHXMQHQ&|;tVUOYKZX3Ez+a!i{S zF^uH(CY$>g{g8+iw@rJyCBt3hBQ&x}60h!OdMQwsI#=!{4BRzrbl1zh6Q!d@_oW{EeVO1g*#;c% zOd9ubp)cn}Nq+qCn}wg`T$<|lZfbjV_=u+Tc`ZqC)Lv(#t5x1aGHP>>wTPfaDY+;R z%7aHJ4i#={7#CUo4BvE~DKW#&0)fxHSh~iNBaZy6*GZL7MJx@`_#6 z?Y3o3+R-}>K_z5cqGQ1iPnE2y7$p+KFIn#YV(-19qS~@`@j|kQ&qJU(Of)8SLJZxoIKpvC@n#o#lgVE``aPPzgV9oED%6=}A;0e+ z!sfk<%z4puqK~Avcys&#E9>9=kteCSgkc%yA&(}p)TN0KCpTY}?J$>x#9kc@aRnWpDrK2GxWX!bRoqIcRFC~I@#hOx+?VVgXrsB^KN*_X(xo+}1$ok4 z6J(@0blB5YGGrS{kXyP(^t6|q`Pvc--Q@>Aif494e)WahV+%WsW(k6hn+IheB&p&ls+Ay$d9Y&%3HDiyLaL$jNz!kXfIk5C{OS^ebBBhlSNHQj|N9n>F^j ze)j+7DdNrft~jxXm;tvV*g~+}WBJLo0Gu@$;k|_=9nY1nB&4VASV7%nb&$Hh@q*z! z$zI(1Wz~)(RR$)}w~9FGal(2^+glOUc3vx|?F~ZV%O;A|WaRC4H)r9-iYNA3-pRCS zdPg-G107$ot!@~zGvn@_*S0!^7;T2@cQGa>mwgfJkkWFg=!>anrBYpN%^nf`*P-&_IOHcail=X=9m#V?(Y|>YkHEF)5bRc3DnbBrQ z`PJ3rB3oxyYntk&QMmGYWO(NG*qs-;B2#w{xFT|e2y~z6C&$hZp4^F8JRBSTD&wB_ zCL~KJ)uU$d)fFG_Syo-CzIe~RK}ITBt5=2XQTh#D-AmnV!(pbx)o7>H=Ie6?BZ7>y zI`Sy(slBypYFyF1lwZEj-CVj)jOTBIyBzI`y_$&BSD$ngFFbZIT5F3I?TZ9OXyB*J z={?`Ojl=dTUTBw1RBF{`!31Mg3vjS`q5}cSd6EL%yQh&iYBMM1ObiDk=XKmcw?50C zK`QMArQVfV=;8b0l<(>Rfw;Sfd^CeR6_1Ra3f}jcQavSd0k~3_%*{{6`azaU@J{1P}(!AT;ng7 z*!BZd4aIPudZe*NF5gwtF*XK-&2nYRQgdtgV(96ka}(+Xh^!2eUNQ{3Ui^ zTmw}fDCq!Qiimix1bm@5QtVkz1!1Ndm1g)$L5_V{!~3^!j@jCw%(e(BKejCx`EgiY zz_f8?$O-*M_xsN>gb(I489+w?>dhY2LumCjKUO4LaMc06*Zmp8?Ke729?5Y8Rut`& zK`PhQ-!CgLnCpHnjrjGudKeoGrHAk%*}hUiv{1134NprZld3!7qq}bSc+z}K3UPTP z`A&9~$L0sNh*fQ!ORxL=RYm$1GEU!&}^l~~eL=!HdZ`2^W zLoF(_e8L=aDRl0Th*LeAS7|>DWqR3^@s-(1iHMz-MK2Pmyc`?4E1n^yHGZ!(+m22q zKceZV??q#y;h49wCa1_^t=N^~d(mtDM0g7qYt2sNGstVYFYI z@*aa_GH3IR1Z9Q+6@N4r>j%d3TXnhsIVCBC30bRRMv7*f+$|=r2Q>B zvYrt`Aaile)9s&P`O*i>6jrF+@D;ydEa#Y<$cnvIQGbRhQ)GLSoih<>wz&RQu87H|iMNS!K_Jza{e1DF%^h?NOLxnou- z^j<9`@ZzqS;R5E$LwRzH;@q#OL?l(2x_D}|caO>aB z#RvHKQUNTiOIcL2UY|DG<=J2`DDm0N?H6f-tzz@O?{B>P5VlSlBGO-8L;jWAej6Xy zk*;;F%n7s1ZDH@16{vC4)`zUD+*BdYZ<*)%lIQ&}=R@EJ>r%}U_X|-Bd1FQ0_}Zvs zyXV!`J24v@VqCUTa2mserxxLU&s{TTyQy*d=KaPS97<9mBzmiuCdV+`R3!a13A0c4 zrzD&mD66tlXJ=IC{nG(r1V_du<>g@v^-sTNM;Yrjl+3M!=V?vz z+%pW6%vB@|hVQOCsffG!VS3!?V0RR0)`7B{lD{z~KWkBXX8o`t*&9B#oikgV@87## ze+l33X7A(Oi4bYWs@+1}G!ft~PzDZimeu|LwX(ycZY^Utuh=yb( z_C2LoMT-rBJP^zPoeA>(v_?zAXlb>9yM0aN!YgFiyMDY{ruSMLmaoEF_V2$I8HA){ zLtAy^>Ct6MHB(K(%OzGP>XiwH8xtf38#M+ri_2V;_rF+%TbMsJ*x#zZ*|LEGQo_rw zKpsZ)kulF!@7RtrMY>ZB5@~8XQJCLwTR7C{59w)@(+^{t0Tv3Kr~Zi7)8}dDyh|A$ z8=Jys5NnSW9gr13ZqkWFgoqE*+NZ!tFJ{rELtWb@j0mad!k`QB z+eP^i1@(%u*81JpgbQ=QSOMkgL&;diT zqgE8&lAz5y|4oIq-HrqekznhhBbc`e9EX zT&xW68O2Ovy^8C@InNP@RL!W(bC*lr=ls z_yH^IoisABr9Ss5uY^dBn3QpfpWe&TWD+AYn^(mTu5L1_>ah(*G6oZ5Grha z?Q!WzW#&fQ%;ukys59-&4hb3oB|lN<*3D)hLGF+s@p27-1cSXdfDvW4hn=tTU<2%a z%Ahn8o&zpZH|VY8oWM&ZXahLOt6)#06kXZQR@ogRr@AB?S~ay>C3{wUGwRCdeBO2Q zm)8=mg|;%NvF&Cisj$upr>{#T;6PZiV{q2QQi`lg;DcDHqa5@$r)r0YrqZ_|?nM2&^QU8bRE`=r__LRh!e?GnUg?0uWIb6i63!!6k?C|U@9fFwCHUw>td=GnbOB^T$fAg#` zv!$!t@jS)(0UBRx4q04TG>FoR@3^YOI5)tpb`O)SOS3xc53N3kYO?;albnW4FR-N} zVHs?$Vl2%m9;Y46w3nKF6~N>{OXn=$e5q}aQdb*bolbzDdzfMnnDBVNFsX5v#c$#?6Cd5aA{(kRw zaU0^sF#(A=Sb5%{P&Oy7)7{8)WZRw?*SNy^J23*0ZqtPeUB4kVI;;pr8HtE&VMTv3 zxjL<4>CLWnG50hnS+@MB^A)6CJyo#LTtSf{KBjxHN$}zYM6(V(4)9bh@>c&=n{M2k zsFNyrFVUo=2|(kZuSAtpnQJI+s4c{TQ~C;_4wu<2U@zD*xFeRx3#?F8o51qMCXRS= zAf@8&dUaKDO{bS3M{SyMjn!~3@iTk@l)u+OEcOa^3M+uD4Hu|#(9#~SX257&*5*{b zIVp_e5-!lRIyp^$)zlR@$S*aU?e=KsUO$yuaIKsolIkQW;bNs6xmaQ|l_^r0D*mKt z%AHMgY=8BYm8wn2J40n^J1&hJ!}&gqqo>#TrP`s@`kg$;4~&SY=i|ke6IRHelie4M zmKt*Eh3UkC1}X{C8P~M?Z#<1QdU|w~Lp*e=3|`QIl^BsH*Uf{7)~EG%EOIqgjU4x< zyJ>RQB%i;G(aO_wWs=B;rMuu_Li^fZ+u&|Eg_!}FGx#gMY-T9PBA0`dF|0C;%Bf%{ z?L+c5*$LAuQMQUkk4Fm!RPv6>S4bb^E50x81sB?9g*FwbzKftP*(jfICw;8nWNhoW zU%E(QTy(ZxqbM<>6_-P+6UmX=Ri_lDZ-ePZ4evow*;rO|Q72H{%{J?u@hF6a4Y;0afC-RpS60qP=w7LR13|bSs zyJlwwudQ)Rt~seWF>;m_ETE**ARXN0rf%*Su6P}|aZb{SAOPFwfV*05qNLj9nz@v} zcqI&XB%>Bg7vQO>;{CotD?^*THSdW6=8Cu42j-2~Bklx+xEuhO7nC(HZJoj&? zmdGz?C(}k9cZ`y+ zkP?~A1?YQi{T;|wCn&R`bqsvPxG<^0OLHTJkBe)#WiFO-A&!<^XAydh;pUOYO}@~roe zW@cd$B<1;4uMvC=wGoQMTJ@0N2nMb=jTXPXP?wMT{1?NOoq!H*A{Kx{fq6Ve-(>V= z3wSle78u-)tW_fK?j0*PrAP6Tn^&Kq?nJQvv-;#n=3V?z$O5502R|CUlBceu7(w8oIsN&)?qoC3!Dz zy~?4`Ix$=u`A%p8iR{fbG(Vhe`AWM$=}>VN(b_8X`A9#j_u@5hcvFVhI$gnlk;O*P zl-yQ#XNi+gk3OfBu}=++wW_u`vPOp@SAOHMy>k}rcj#>@xQgYf08R@!e;ET0fKkuC z;!i!nk7C;^0!D-t8B<+gBj!cyZgH6_pyO`;>0Y_1nt6G$?CTQe27-sKqNxfg&Os}; zr5xP5_wa!`IHtbCh_p(*jU-b&OSV0w4qjy6>mng`CoXXmEI7L9(7!I=QWaV5&-MED zb< zm-DwZu{FE$1N8SLvii;hKQ&v`dKU$~#CZv1AB;dzeUe_VzmM2DFl}re8eYf&#=pW} zXOc^FrZ51B3cya!$*|Hui_)m|{Dy%~z{u~t%baT+`BNuG_!1lVGnv7S)+(4LtFjZ| zaKit6Ji2-RZ#Bbn^!L|rw}QLZzqNj#@Ztk&PDWeT6yP=acXhVM{vqK0{~**a1(@Xz zvi4)wA5A=f7V4g=AAYtA0t!prB4n_sZ10b)!LjCT~x1A?7xrs~N4A@d+9& zR^p|si*hWkmCSwIkN}tUdCC|yN<>LppRoRF0A?LCS)h`!4lhq2mNnG8Fg@qxsYoNq z(c@9mXHNp4-&Q<|?$<8-8)mqWo0pk#)`ia?N=Sj#$1TRGW4`xDK69lEB=Gxq=U6Yq zm{-@T(c^jBxi)h7Gj8rZT`I%RqLGRg+>i5eeO5bqBUU%S_*>+*quZ9m9qh2vRq@h( zClTuh1vb%h`%zQYQQ)6h?xyreL^wn@-{9Mu%i7?o*uBVl@n+GD6_ybCQd%6Df_FT( z2bn*KwkC^OzT)L_2UE$BAaUCgG*P%K)NxyfX5VN%%^VY!SB45soC}O))@#BUudw6N zKYy(#FUg}55Hr!9+2@hW5^71fjsXo*VgyCa+X-=xIk$g7V znbOHY1gFB88hxB4>O-D0k*eVv8=Ue3P5 zp`P*-D-RyohiU|%pFnRbaPFIvT_y|_ckt<`tw}phvksNuJ1%PMar2pF7lStscnV&N zq%btE_0iO`eay!|QWxEpd~q_4X0z}vvfaB`AP#@>Xn8s zd9HwL#K9vkjs`&E8xKu~l2u4=l_||k@p$8x{rQ;=wd=iTmc?@FjSGQddU2H5;0NZy zl=ZnTX;?&7WoUaO?27J9|C&s;rm?)l2Q?F=oXH!qQc_5}6w&unUYZDriu%i?tLjRP z@&0T}&^fjxrw%8IZ9jTs(!$;Vyg5k!4vG}%`vdCjsrn}~SOc$1!k^vSh9rgm|8tYd_Tc&W5zTWbBMQ-2aM}QrK zUB{AmNokHW-5TqeYH&}=?;K9$xUAk2$SsfAc)Eyax~*0ew*czpeiG|40+Ia$(1Ppv zQI26otzS5>e z%?8~NWvlF^_A~ajtybHcbLog9d(Q>fN1rgXCQqwoj(v5ebY#X(;AZo93C7=yNgC}v zZ|crBl_R2~g(hw?w7e1q+d!_O*Oy~s!9)V`qFWD!3${-`?J@Fyr8F?@+b}kqQXmEu z$JKosYuf*Ia^o^Z_z{+=jM%72CMi$vafgvo2=DWn>R3?iwcm`4yGkbY*8uho7jN?wZ^_TsvU~CHO+K;=cMij;+SrKYuPdVp9>i!3 zif$htzkQe>Y4KT$`ZncQ#jWVE&*mM^ty;tZ6e*wtLYZkpQFYgxD^aT+_O74VW<@oVSf;aEB83xRJ9)?rP2tBpm{4v;;0lY4NV&)4)0;SIiF z#V`Am^c2#c(kS0%dMlx&a~TV8KKuYt&Sbc1BNy@)KIL1SsJnY#eWvt0bIvtm*7Nqf zcJQ2lN_1kT4emJD8rVN&c=qs@r~s_2Z}q;xfsjC6z&G31CkM4}DrnVXRQS0Z^Fq`J znj7k3Lt)pOIFXI*k;`WIMwbbLmfrXFtpzzhRMMJj^7zaCgx&Eyj{hlC;J-s3L{BIb zn*%*R13c-<64eF`Z0F%XNY#eZ<+Tw)&tF3z<9M4d_*1DUXo#QrH&5Ge@VsRY~K z(ntZ3WU#}f?D8NYwyH#5p%DO(Q>JMpNhzfR&i0NYeGT9B*V^5QF%*?<`zYOS-U1w8 zE|bbmf;=B{X**Wn{`M^PmPn@aGoDB+5rhD>P*Y&L(kwHzf7g7)r}3+mo2ZVfx%jLZ zA3J;XM{-QwbC=um6YdlFHK7Sw7j6(fx<|9hFNz2ZO9iL&E0Ugz8r!kWKJq)Fht~$( zaMG?-u)xy*Aj1W5RBF|SciKm4Y(s>Q-;^U8syz}da1n@aua^D9bCbwUa_iWYB; zY7jUu>u)-uf~+h;9nH@B_+c=0WA|U@dV9;RO=sY#Hoz1c~x zr3G1%M{aDmRbeXNF%@rwN87frOfjDw#1Z5q`?{NJ^y7EAlr{wNVOgLn`WBQPea{vG!b%(4_2Cxa}$9?XQbJ zSsY(SC#p(qc}4!Y(NhK%>0^mu18gUv9Gf9gRkO%k#W6Ldr4pmn7|vm{e&m_T;hoAI zcQ)pCqH0U9PyhVI=L=eFPw&lCkx@=>@o*zARvk6eY@Sv0srKM&oi0W${!O~MDu=JR zigqr9*sIbPca63vy~>OjOEW&HTQ%>N(f8D>9EW5fKP%QUNg- z98^fGdyyBfolKNRMXTMR;D@5C^9%Q0)Q0ErNAj&mdxd|Dz-N_3nFHa?>>$dP`q;`k!A*}EGQO}{_ zy>a8le(_;W`ZaS!EBR1=5KZ9YNqKTKs)ZNB4KZkf`oA$)dp>2CAVR0Uh#qdS2;mq{{(2_p%mp8mI zSru^G@%Oh=c;Q9ZmFCo;OR(K?XLN7B#KB#Ia)Z9?xsQFYCc*mAjW|NJ)^&p`{Bh&Z z)h=*0)_prre~jAM{W=(7hAI;so4FgLUBDju&FJfpwJPw?ziXcVLdqdF|N6fI1Za73 z`P)90XAXkX5V*9CNwW@f60U00vVWg$p(Z5!F+v&Em;U^4_N|lPZ=%ko_R9cAjZs;U zyeJxc@)|geMlAZe0I?5Zk@+#o0?~e%#>99Vi??@sH^eQw*{*6Tf4IsH@Is39I&ob= z%PPAKzgn&Kvp4kXg)&Q&5wUP~%2bCWdOLZqXkD1?`pj*uT--1BAzjZ)*wfHTce$xl z%%JgHL7H8x^#_Q#g-<9IS@x`93cf+Ifcv;=a?iSYpw{n3CGDJ`sbXz^#>_Kb9Orj_ z&FM&sldQ{+Eh1jB8X3n6V6_PeU24f#@!;U;S%-0*v_nNMXAu$s*Dm(<-}>U#2xM(= z#|U>(DD%};C^>|`aA9WHwam2FH*c}u+egIdcw6{IzyBZxnxGAOs{*@4r*1MJj1Uvl9DX(nB81^CQPop;&W6T?yaY>=@>KAW>;(| zg1*Uql~nj~@@D%vPsp*R;PJSld_V3EV>A#+ao7;Z6*9Cae0PH4{WLvc0?s;u2xguY zor#NX28>TudwCwf>qv=v5-rrP*JP}*ZYx3foIRO<&aMrm=$*lw)Z434W_4KzwStDj z7+Y?jUAtI`QT$sq=M3sLdi(qM@c=rItU;tnm?}UT+QT6#GJ`;ipi+RNd}kK5P0g69 zy+t1MWyZagwe}lQTTVhH&%LC`IkdveW45dXvXfpbQ;Gt*aIt_>gS>^=tGyL_6$vRS z=q|OBF*q8~6-e=^j-(fI;J9@)n>JxkAPVudfS%zwPKVdUiPvRelgV-{rR}-i=TEk$ zr}8(k3!|BLA3roOk3K#VSY-P6Tc{VLt>TQL;oSyhBe8K>8zQ73#ql?_3C(Bpa1OUipN?Pf&n%(Aim5 z*})qsSF^=c-?2nwC|R^;N&igfw!8zfY|jjZSmEgcLLeDU1JVRDig~+kaqA80NOWH>vp zO;Rw)PAK8_M`*o+?r}qth3z-0ml>FoX{jKFeWB;c!a{tS znsoh92g%wR#h@rW58R`RlLWw#3SkOext|TJ$nZ@5OfV43uHN*U{h321ejTi_sir<2 z&d<`_A3=mzCw##j5vNc#nl&4!-#FcZ?*)Adn@;RF8l+DDerLlzxb9_|D%ZUcV_K5v z`r8HC&sVvw2(w@q>rh!;2vW=gpI|LtT+NB%Dfa!CX}ZMOekw>4{eb7Y z-El3RrT= zB=oiF6M}R6@W#Ib+S!bL87mq~A?Ne~1Ic5(;)-vy9$`nX5Nx`{%*|fv^lL|mMz&zp8xsn znegRJVkz433KQ{tsC5=H7VU$D04|jSI5e2;mn$ee6p1pMv&KfS<^p*|iU7$BK$jRA zft>>%Klsjeu|kHGG7ZHjXpdu|fa!Ph2WaiSFghyL33HJ(4?E+$0Qhx-pzVmGRVRS% zW&AJsM1Q*EN4Nj^X&b=P)G>1UCxG5mPG}+ExhIFB8o(=8te{8dY-dtGKpbo+`on{> zQ*b@>Q2hi*RU-oKhi!HN$^r%GhreFxqe20WN1DqT=vMX)__Tu!;~0zfD%-340a7Ic z%C@ir2|8}j4!l9|<}vut39ABL5m`qZ?Lz^JW-WI22ulIn4;_vML=1jrSN-{_Y?Tbl z%6|d)Cr6bhpa)@K^nwAfq5^{b<~^scObvI#^Two9Re};@Uohlh@CT+!tK`q1hn%J& z>%*$|f3INtmq-4o0)W`BZ1oznRTbtC*n|E{N8AQF;&KU%dvPD~9M!!mk&97BUC-b6 zHje0j$-SjYDXOM;O-*v2ef3V+5ah}7HFe^bG-4kh@3!0BnGh&VKOQ)ekmkXPK$o=D zbs@17LnB0>_0A@S6U+Jol*I(_`)4hy|8iv(i$KC!0AP8f)AbBk5LD_I;e#l^kuLHK zs|f_1O`~ctI`TSzZ~nVHFeMJvkIOI$#od3O2D&qBzs~5`UoT;7uw@_|3xEeBHV<{N zHxsdRr(I6x^rcYLF!p9FIt`MJeY@j33JgUcmR-*RAWQ<*Vj}dAXP54mhW?*58+aa- zZX$H#u5JSu69?_MIspBB@Gsx~$5Rz`@w0`{pDhF&V=K1m-3L*tS!j*FUfMwKMg670 z0O!KmTQtpk;P|rzT|;2PFL3@kEzf;JfLY3eegxPicR&7RTKybnlFL*%*A*};L|!H| zg6BeKfU3#V79_^IW{t~Gmdk%m7wXzzm`so?A7Cdznb2~63g#F*>|H8*B0EC?zN4SyjnF?myCi~tR&JaPORJKYPrl4xhPmM~?X^xffkq zEId&Sox6-6`c{;uV-7L9J3;$xvr|URLAiWE!1{$1(d(j~&AX&(V7p;b_>7m!>f=!f z?(_~n?g@wp^8+=ZYx+jEjg)dBqH0|ioJrkxq<8HbQNv#s$h!P^klm4`)y>A*^5pNH z8MVH2X4X5r{V2*>FFG=ifp_NRndZTuOPc3bSg<_L_)X~5Z&D7FULj@_#yT%OqF%X^ zyuDE;xmO(^u(D#lGgoobA@52ZNcrM92E=ZHOPqXu&Z0(3idxY0!&TwgvQ|HC zbnq959!kEsn76s6JYuD1K`rf#YW|SW5{DS;Ia?Vi5r|Dte( z_A0B*-sC!G*l0l-Z=e+Zf_}4?D7KrGt{OeQJRB*{JX!i`_gJ>xok1KG8gsaBaIi|* zhhfgyp~UM}xa}IJ{sp6e=0{GiN=3RMsCG`psy9P6HS%M|p2rWa_mi#|FO*(i)65BZ zUjH~wx|QAk;Rw{uEYOsD?B&#Pw34CVYU6lu>me8ZoL=hl%6I}%^8`J<4ZtLZWW8Jc zf?h`%%9CJZQo1d)6Aj`_x8V>;XDw<{0eI3b?d@1e^YWZ6ppVl`wiiNxkd9lC z4yR_;!-|+8!RvVTK8Z~4o4_8Y$?=uE4EhObhTWQ+-1qT40sB;*6=F5+2*EGbPWhZ? zXXL&<*z`(D-T8$p>19Jt9^1R#tCU1%DV)t9NTM^~vZh4a&$vUroVdN&h%8RJI`(VTR@>)DZ<7`dl+ya;eJHge%tmFK>HvUewNcm50# zE1oJd&9{P>VLS0b6{5u7ER-NpRy=Fs6ZlR9!)xp9+XNKM=7~#L*4|$WCn5J*0=hC32CW%ZRUL0Vy(F<;xBZ zLZzh}Hl;jGO)=JQxf|;1jh}Qa#7Bk~@Yc=WR}`#zj=OV@A6FM;79!!Rro(w}!lBeL zN0GCgy72H8c`ffAW z$g)3@?(oM)c4LV?%!Nt#NJ&}0VzN@+ps3w<9bPoeT4c>>*a7jDK7z8KZ%z568)q1e zNxwpE=4!vq6;QwlaUm7}5!M5RWVITNFD#oX;;lj+Ft8B4eEx=9oxoqF*>#B~mraZF@{$*xv zeon`EqTQom?-OqY;*IF^J%k?y|CvR#Ux*(9fz&>Lv#omWF@3>2M{Cr`1jjTolX7{| zkvJmd$h!#;?^#*{9P!)^%%}h_Ru&-JeQ=IvYlaqy#qeL?@~%WBmp%^8Hm1(z?UI^) zGV$tk_AIOatboj_>PSG<&cKtK@7_Y13v77AJtp{qsuadu7PVO(!mDy>{+U*x*B#dp^~#jFkU3_fF~y*jO9x^OIGA`D0;^{-w) z(TW&fXNT)q=4t#&ONxw|TyI?R3Zp3K$*STv>0EBpPdd?{2~VWP1+yoDrYN@PoJ716 zwrW0FD-tQ<*(crh{-m(>nkuvXP8M>DY|aP!mQf#j4X_Tc0$tq_IYl3Y98V~v}ZM2qsbx-t=WRb@#j}8$^O%s-r zyQ?j;V)F*ZMz`yQZ&`;dDFIn&-FH!@fN6+#cA0|VUL~$3i}n+mIxaM?X{`G#ppSoR zZ$piq^cJy(esEHcscVdy{U8uW|FdrnF0cGPaxmm30LK5RtzHAGJQ>8J`Ker+mUEt? zW~yImmP7hnd8dPo-qTJvSteDF>*uy~_aUmyT3NtL!ky`{gtm;qrPV% zv+p=HG1`)A@!fLzdt|!>KR~=2BhXzb*Gv8-DB6v1uNk2^218n~0S2#G4Zw~AwQyp? zNMFXf!2;kJ3r!7s`TYouLZ}<7wiWv&l5lZ54WquTnf74Ni=)OcW$NiSi7HPI-R$!+ ze`$9JEaF8>*CV&j-n-T6{t)Tusxq>{Lem|Cg_B3+SEv)tn1z;ZqC)Hx{{&HHomWZk?m??oFxq$<352h@* zE{inO!0=_l2fg_bClhy!?y)l42g{^yGT)eU5Vpd?hcYVVXtILz$Wb{_9qKR3$^;5u zqqEigUVdw2py}E2<42Z-R`1!ZnBB#iZcF(=xPWRy6Er9XRK{ z<-=0LkiB3g=w{y>uopeX@PC4UJ9hHy9`?;MJ5{kgnQA_jUVXpzA%;d|N5AIKL;yev zi$ayqV#Q~PhP_VQtKNtHhxoA`2ACxm@@p1R`U2tyfnmYwI!bn!b+?C~N=aBs3o z4$G#a!@p&xcvhV-XU5Q_d(dEEjHrIsKFl1L0$<+&%LFCTMAu2P-Iv&(_b%;? zB0?oOBRQ=U8}|M7ymI{52Ri{vW6iS2MyHMM2rTh;&t2OeAg-xRYzyK{f7*T7ta7tm z$9g&Rty*MRgT(w;)li}5t<9XxW}g!18?-~pRGZ};ZONN*l~I(o`>B|+F0TfIsHtW< zA(V@UZ(9U!S*^U~-(pb5e;$=?XMG=p<$G4Q{)v&a&nK<@zmyPzK(DbN+E}G&Y?k(+ zD_%Uci&D*Z{t*5iLb>?ie7~1Kys=p)KNCM0S$~NP8miS)pVrsLUl6ha;Dit1eW$m% z{G4WA20#T(j87kZiR-lgesw!uFwdL0D_c`Q=536|x&FFtJ0KRa;+TcR`aW(Yc#>-(c<25&y9f$E(Fw@b_bSszDb4N>HK>O} zv|f~&7`Kbpj6X9rwi(&3FqSJ%dMOW~nCB+|?SW2*Oko%7UZGv4tSCe<#@78Z2g^Hh zKmLWU#NMdSlMDQ&D^k%66ru1HpO84A4bp(u8ebM~qfx6sl%WJ_VIgUJOC~EoLe-Vv z0}q|Ot$m@~%grMWJ}!OQat4pigeRFFtYTxJj?KDCsFJE@U=R4g=tJ80Myu5 zGu9EcHw^O|2h^MjI-vmo*w7@soP~q7VzJkqNG07J^S)S7W|=QpKfBi-Cm4X~aOD^w zj6#o}$e>S4A##%#CbID5rlkG#nlbLQl|9yRt?G)#P|bn(hVuG|jWtc@8w(pbt9ZfP zBbi)iK9pjUav3_Xy>_bgyH6R3nd5a-&v1^Zs^G4GesnFl+Qa*A%E=C=L%sS>R_ltZFg6I1%}*Q-&pk}M5f&GMS9q5$>L;fb`F12K zv^_29ot_JtO}DOYe6yBL)O$I}qLz%KL+P2^zyr0nJzpK);S6~_K9NQ@JK;}u$2RG> z`h0n2V>au&FoT#^xS=T?TdsAb$Pv%?x9WLUnj@MSNSM_fI-Ewr?}j=0IXe0(QkjEa8_5&lb~Wi=m}Bk(hfRR^i~#w)rTin@ z2sTsj!mUzA)F%4NSxh70zDnd;4FP5o*8|^I;zA1Zazb7PBaqd7;Xp#F`}DWBdk_SN z&91Ojb%X-<(>N!Cx6c(?xvqk&yUcxjLV zNd^IIwr3&yfH1&S8kB1*f+Pop@w+m(mNGs=D(@;I+g||x>eO~S`mJTNcS-i+*gGmF z_xY!8Ugk&$zg?6@b%m}PHx8-|vC#t%|C@x~6BgPZpnKKs3A7R5G@1#yt$1(#1TqjK zs2T}Ac?$5(IYmt&s4xz``I=lJvh%|Q9izJL&XOsg4CJ)yuGaK(zf0t>TzZeZBLVkX zJ$Z$a3WwQ%$uUON%_@~s80mto(GDit7%i!Z)J#?0&ZOWS2Y8>N-jG*W$}tSsCsr5p zKYx=<^kTaITcj>>y`|jINoXTN(~)Of;J||(lcS;~e)!c`_HC5&hiRbrRe2c`h)x|c z52a2`i{%(C`+hTexi04QRLX6IMybLF@850uF|_C@=zD?nBOAGGLLrQwVWHkm z%gq0Lrac-eSviwu_l)22U9$F#u6;e!f0Bw0eo>09RUL&WdOD{sNUq$yKlqYXPv%uaenwMVm8oX3bZ67< zAjiSA?DwE2(>tDRIuG4pA#nLGwcU@Y=0YwW3Urz34yHV@Ko_1rAj}z6rT%{^nrY;( zr?EB^FOO;#Yv9>5Z8QIPUX1jEPTp(9w-t|zb5`0^6k75n$++nj{m zP3;;rNx^V3l3^}{zx~Vz75NC*jTKnfs(O{;?vP}}E^L{81iCp3H3O15DWVCnzA4`U zKkYk>rhVKE~8m6S<=85;8>hg7HoSmt;Xnspu0WZs5egeYusk6{z zZ0JdH-|Uk}=t0>AUx2YHy`CaE0^N_Lg2A1zZvmjeAK0ycY~&2=IQ00cE`~4`V}rYU zATweaa{tYtbl#BzxamWbI}87+F#7%vkS**Sp9hQE{d3NEUI6Cy2p<^93Pyb-t5m7+ z4`2|LapCK-*IUnkikQ*=S|s-$>IC_ww)9Wl^?8&kFyzwX>AvP_#_+$pBh=R^-%gLp zHl>l3Bn-|+ccCzMTOP zQGb1M>|cw0yzcX_7W_Ze2QO{385cbs$DjNRi7}~7DS&!_d-U1zz7*CI-G4qAj{aax-ewvU5ZDzh&vC|$>D@{zSKA) z=s#04tjY16mVv+J{LHX6@wK=+IMu33{Uqwg@8t0R*^l|(?)&AVP6Iv<1z3uHfNt$U z9s&$Tw%|qGOCo({1@^#^sgapJpR8`4-RO&(Sb#o5cUN`!0ECeP(gYoZ?>C@W2K&&5 z#yJgxU*J0x8i&f1YGm&lwe3ijN_^>-4uAx48aYyweh0WR_ATTo;3~LV)&WQ+2>mvJ zd0ZixJSu)+U=?%6=v7DJv--B=&2@HbiAz3=7}^+lurwXSjwEXvWSvtSb;va2sH{|E z);N+*P`fHyS#Gg!KP0Dn!Q(f$D2AM>1Y&)u&|+Fm;}FHqE!BmJT%h9fpdh*iN31Hp~9AzkivXd{;v=C>m%%*qaToKN%i-n zi0o_wER1bto7H1G8t^j%{4F^ZjY2)c*uLKYqBV;{AnkDUG6^`5%XO~rKgRYrrmg zuayGFB4DWFR!m+Tp@jYu6fDTipy^WgVF2}oLN!+%ySADKvo#^}hhrA|RR4p5EjVwkw=dm&ECQt7pGllz@eJ@KIfH?32h9o;Ko={nG4d zKm?{YTPu|Aby9e#S)ad#=L_u$NPK{w)sp3?JBn%AT;Y-(F*OtkMQjY=TUlX5Ae$vr5o-F<@C??u}Vo%}p!r}!d{r_U`J;S0} zvi{LVP((lsARtJqASeh(R#F2Bh=_=iQ-gqHkenKtARsvjNJcV}v&1H6BXF^MYSoIhSFQRLpNXN0X-dP4wl03jtCF^rfJij3&eK-ZBC4SMU2bSeJ56JSAF` z8mGGPT2p&V_`9s{H2y+=a}L?b`sEnow>1+ICiw3f@*HQ;ATd_25C>|*Y z|A=sX!_`WHbw5isVBE7K1#?D55Lu5f4s$m;zu}IkQ~hztEIEvZ?sDb6?`sM+jeT{Q{pMzH+q@l4l!43hW3o+Sba5z{pIplG< z^xUFTc~Uq-k&|TTgFdse5I(}7j)$6(sgO@Kk}GGu8)e^L&jsM{&zDB#8QSs316$0x zz8jPYhW^jUB68Kvae^OWQurQ6uV?4%$UN&4I1+3Tyn5Gu!QV^bbx#()J6T3v2f_o4 zd;x57?|&!;@LKFU8uN0enrzqY$kSdMvlba-rp{{XYZY$Dj30iyQST%t$ZtYsG~!Jnu9a8i)MY{=3lEaGtY zv$*)Eq6GYJUMT1f_hax{!6WzkvOy*B?Vx}9TuyvMg&NrL{q6ex)T?}?T(R+d`njWJ zjYcOq+iQ>ic(w!AQ-*hQ9Kd&1#eCW7{|8TLT+v(^lS-6d2-F(?erNeles#!`T*EUY z;ZNQ*`EPzzl^huLpU+FU<7LSJevIPe_tK%m!7&L`tG@E;=OouKX6I5T|Lb))^Yz5iY|vdu^un8BFiBo?T@ei=>f`c1YI}9Ji%(C)W@KWWaoYeljjG0yF8)(?7+@5nC#=uMcVZxw9GYaYq%uzpQyos z@m#`HdoT9Onvyrx+LIJ(FFL!F9F(9SdpSoXFbJx7dv?hcc01b3gEDf#$V%!R{-#fy z+ud;&McP;`-HRt311bK0(ld4#-LO}1lx|`z!!C#H_A={g+$+noB3a>nKdCk&dBMRl zx5-8M=_mmSUaZnMzrKH!noZjH#FR!id7(u1N_CAQJ%i1fK@oBC?lgv77P8gpBL4@c zR>RRc++|?09iOE)8+*MGZ!D!+99PXth&3KvlTI6>b`Q$T7}{fH;QE`o{aqMOwH5et zh*uvfGd`Q$n$OlF%0w|XOh3oIi#j4zr%P#LpFfIZ{Gg5Zp9ur-2nVgS4Y3! z`@2;V3y@$0a~vlbzg6V@%Vm-fv+vz(nUjTQRk{*-8kycOeTfx!4ehN~*1x;jL~3em z{hV>$PL%i|5k0)nUu~>f6>&AYIFGyysFM~59d17J!-;sjTrYqzZlOeuv^c<+O8vlS zTt_8>9f$<19Bv_U0gaPE18@o$DKgJ5V(x~R)GLI?)3!)p)5!i@8cKGNe3vd<_LC}2!st)}P)Z4j zbD(U2dso04+22=ey6abb&6jyGGG5Y@wHCn>?D~vPCy-?X76aYLJHQ%8q24R5&K|Vm zB><~HG4kcXk8e{c-+Gs3;0)n!;Qo+n!g%&esz;IB33My*52}#gF?FnI$u{I>T{LNf zz9KUrtc8*Hf#OMZv)hQoxtrNg%Evd$~>C!{gi1+%gSE>zfa^fl%chO2&A+un__XUOENU~~=E7{rEDIQ_F z_JU#TO|z*!_6U6qb0Wrh2oHM^i=lp6%&N}n4+|2jM=ivGspt7h=Gku|J-zUmWGGP%R%edvJoahtE<1^EK!)hsBB&aFeH&NyTPa2j6l48( z412r3|F9x{L+lc@_u;n-ktG3n8_zgxD*}5>(`|F3D}F?jq9^L5iBx(TF@+j?WBamS zjOF)?U+=tNA%0BnUQM<`!MA6Vz7OeMQm$ajnVmGFsOmGjRqks)|1}_4t1c7T=TAt0I__pKPWbbwv{)&7uW9L8kf;MWCz>4ZSRD6RR2 z?DhG9;_nJG9bGolzZJ{Ug~1mu)38ni)bWiaf6EkJfmlL)F&&Y*4Ov^2-GC>23;NZj z{Cb$&R)YHhPqDDD`wc?}bOhi;<>c#&hDlswbzv{lsM zzvd5gwWqg%^ zZypMXQ>W&9x{4^uft2Im{E%O5*l)6ee$CylF#E$#(66Un^RmU45+W&pa4j1lhHE(Q21iOivs`HZ7TwN(gFlqMFv4XY`c$-z8<-HaY@yt=~Kkx}NAr}UyS zaFDN{Tq{Mw``s%S?LlwHeHk$s#`ddr8G`TXt`|Ms5c`rreaGh^aP9Z7#}DD_N8xPT zWW`3(vzu#OMo&@n(q^|RLc!%;6W1g(M;LrlcJAah-$ATfV0gN9Or3bk7ih`_Kh1>_ zVH<9~$^NX!6_YbNUn#F8XX z0JvC1gudzhyOa9j{g-#VRo0h+be(wlK5@27c6>FviF}&7F)xOO&%|Au+pil^99nf? zmU>itL9k`qwNojxmNtH%Ckkboih8`K*(WGbLp3mG&qg=9emR~`-muTYtk*wobjtqW zn8Z^-TIV}<$c|d5j?ee}*R%#t>vY^g9q~0G*#>~PAEQ5@V>J4T6V?TM+z+-t5d`o> ztAmsm5Ya>}8l#(<2kgEkucl}l(aesQe;9Rkd+z3qN$x%A$-C{8X!)t-U>f7E>DjXo(~{J?*@ZxJ4ma ze~$x!VmP!OQ}X^k7#tpbWv|)hme{4XxLVJfT7mDCO3-56v*z#3H@+h^!_D<9?gk13 z6*041^5Do?-yyt7*D~eGQNzYp7vyza9rpm$m8mSvA*`%#d-EEQU{lv}3Kkd+T!B+V zbgRupD^QHUr@c{ek=v5p(}lXrpFVyG^JJ|s7$DgdjvelWU&?U-+qaLbxbWvok3U^t z(#1U2&A;bPMkr9=F-@^B2+D~F{>U#Vc`r zh~2I7GTEX~b{eVJH8YuxXD=(wKu50gMbwUNm38&|Uozt!aG6|h!+%x8JwRjdxq2bEW zaJsROlK&*Gm5$0;3TB59Mn`Pd7fhBE&k++v$Osz@?nm%$`P_c=`eVJnPEYib@O}HN zy^^DZ4cTLCP_%ba3UANExN3bwndp0eI(ZG8=2I;wjbs|A$;D;`id2|(M-;Jt*d_BE z+N)^lGc04*HPtQayu|&qbCLRO=&jpx*B(k(5{;2xxrUI>fg9#sf*S7gaT-RXJn^lC zjR<_Y=&+yHYq=DZr`(89qSM7l&p7C~jt&DD%ZOyZeQ?>4&5^#b;EVNV}XWAUNX!6I-;6dr_ zCHKCgZ+%&g)C7=?f!DlDiv83Ao*KTLQ?vTMPG>$k%k`l4ru(IJMUsomT+bz>{X^r< z3-W|2D#fZv8QTtonH?JCpizB$`MovfwKzAJI7K3`6bz8ZXTPZg-7_ZJU|NB`N07n| zz?ZOUDDfpfEX7>VCBr@g|NDyt)yC2p^WpWa7S(2=+O9+w-&vk@4#;rn*JMUAHDp#j zp7Tp6`H&nfl{>|K<+j*oKLQ^GE{`7eS<#_?dJ+|J*pz6@VDXm8RGf;&6fZk9|8kZQ_KKE9Ls9EIIBZ7GESSw9g_NcsKh*?*O7g=jU zs<^qS&O)vn=f_^=3k)pidbnEoBId#9 z`}?&CAQ_6>YO9NHx86&zI4oT3zo)CfGWhkTTMyDg+~dkCqifNA66y9L#*fkq?&+N^`Rx(ih zM6?X)^JUx#Ls)`*X`txmsTx^DZM3$zmFxWG*qxwl@Vxr_*Q)S(9hOav_@_(s zz(vY%3&^umM&3gh_QRJ_-~fuib>V)XRrewn{sY+z-LMiN2~AR5bGM_x6#-=~!W8FfV`#KOuT-3%bY5dcuO?WcW+!3s@%7 zteolSFBTll#<{1A%7xThsU&F}eDmO<)eQ_Ec1{NpG4UZd9jsyDo1Gh{8YnrM4f&do zdb7OWs`2=dafdKF+O7#WrL}fl-)(cK8CsmBepxVLt!G`Uy|BTDe8HoRx|x$pilWmR zFbs)+`Dr2}I+7YI^K&jtgQ?LR9x?jKM_a;RP zSd`N*zIk7H-zcN$*_m>x8=h)tPvrP~U;&%}M~ot{6&6oo(92CfcuTk+6Yiq&I8P#& zL$g6}IB*I^bW}{5T4f91W6pQu z;TvT%%kHdb64@Xr_vR8bT@!qQdE*R-o?nyFHJdV{ByjN%y2t^Qg3%)-o56(kmIuP@ z_TeybI}2X4?_J_63vtOHx^w58=7nT9c!NH{+IfhI>^Bc*181?hP>rc87@#;bfh zG{tkO(ZVB;3;MESHbBnwW`Kf=JpHCq^wy2XGn-99(rSiFDDkR66e2h#7|1zt`R~eV6O(%37=smxZq7rwUkMOU|6h0 ztOZofrHAe!I%}R7FAc_1V=6SsD8-<%P^$OVey^fRq*USY`iy@_u!J~ldPa7%e=n+6 zqDX&klXmKd?N|!kljp<3XQXAP?p+aU&8Qct^bx3eBd^80g-2I}!Luh*|2n|V6g~II zh9xuiyS06D|3goemnQWY%3}Uj9kdIJ)kSsCq7|f)FAtbP<@wvM1HDhyzT?>{zM)zN zy-T?{pX9r>83-YO8%=*u{YVKX6|@32IGVC;gP)Y5sHIa-HM-#ogjdbgbEzd?ItJQR zQ6MAtf_rcb_BxF&w^3XZE4;jKhhGXZ2PvO-t%Va;d#nm<-Z8IzRbOntyAF1XsvjjlZZOksrl+?wf`APG1$(s z)-|horWHBA96o%&3jvWt6HEo)dc`R+ zKm5A~&;P~m{>?gtU&u_qbCv&T``_g_5lk@19MltW5r9kpBXdo-1u!yB8ec2lR`_WS z=oXt7OIl=<9tn%9$;PEPT)3qb#5mh6JH(95NAwF?*Z@m*_QHYOxv1iCCnAtDFZK1& z$7=b|b!wL%?MmhmLi{@Pd}nl>SDcZM*_xEdOOvAl;x?9MY5p>IC4*yw+o{gPxrp&@ z*)J>=AU{ zycmypJ8&6rR^B8#hYvV4sHOH*Zq{8PfZ-ksv*+au^C*?bPU!5*u2xNh_%~%A;4^8^ zLhlbSN*D9{Hl(sIzJ|`rM4T%tyT^5x<@Q5EWJax9d9C7Pvu(|UtSg)pcL64iEJe(L zT_eYu0waaGs_yB3k!5WvCIjgSKQ|Yw6QTLY{IRwU-DHC zITngvKhNtCvVWoA#y2rns!&kdVbRQH3oCeT$-_+Wagx2uYD0d5rOxH4+sRVIHjEk)nA}WVQToe;6yZ(+#ussTGmf0{L)7amBI5bDG{0N}l!}dx?R2 zecN({$cVTvF{DO|b=Z!suYqH?RTmNp%QXW%)j{WHM_(9^?>MtOK_NV>H$P}nmeSD- z?$WS0wT|8FEjDFNNn&{~6K|9$prY)EyccQ@X<`-F)A!7?mZh;b+`Y@)x?vVPQ9*TG zjj>EDxzkc%Up<#97er#!FRVidBs27ZG73Cd6jOsHnOxe+Z5Ha{(x-ykrZ%Ki=^eLF z-^t@FiIxaVyR4@Kj*9YxudEIqvIoJa$$RJ45yk71IwkQ=)}?gn@mg=+mj{z}eKi%4 zuyO-#z8=?kfdbd($j<3ad%%m>)~2YMEeNoXDRn% zMR1fcv$2$Zv`IW)`OdyJE_Sm#8-rI2+=%YF4EMud`w7B#>Ahr}KxSI?I@@4a_4(SC z*q-L|LMm*g>aFc;txIAXwAK%E*Vv3QRA2cTW7^;ipCp;H6xBb5PluH+xzHWO;Lh9Q zH*y(s*)y`TeV^IFjiy}-QGM{3-1$rP0}(-guqq~|b}Z<9p5P;6u$S4b__4c#5jvK9Z$@h3w>gz*5d3#xNRaL&6W-rfLn2O(O$7TaA{PPBx#g zX}aY$3irmfwS-p3*I*7P3)s{C3AETm+rnMb3SZC3X=?9>U5*cPslxd%(K|m_N^H1G zS2rz}54jz7ncF$vWfESi;ODrX(K zG`0@~A=okiy+YQO4sDF9L&}`B4cy@gJ z;f|VhNbRk2hU22p*Ppjpj}(JArw5J5)``i02?d=tX`OaYaC(R@14Im90~d)0cTbt| zg#b}_wVaK^?Z|M1&2I|$LGPm4VUFn0XYC`@f!t~Hs)#u0%}{z6aLFa4S%z>#>+-y? zqczs}%P)q8pgg}9m%hCJoaicmnk`q|#F%X>n)5(-b4B_@c|KqF3=~FVGvTM4Rt;RP zRuB4s7;f3&8CLqWvHtM?+kEdYn4|x6t@-=C|8~u31EyR#9LADE#4C{syKB6C6S6v) zVYjX+T^SqG6uGq}UJ9FKEsoLUTE9Id8dRPz#Jp_`_DHzEji8jCU*~Ixwy7x-+_bv0 zW80g($?fyKD&XeJrcvQnjZ4%wy5#k=dEQl`MUiuR^Xp32S$*| z&-?cJQWiVbxPmCB3T4H|Qj?Oo3^)9V|>wPch;41O{* z=;6@E*FT&No}-hxDl0XPwnr?)nWsKoi zPxVb-0H1pLJ>_)*6a(FDg7sz?Uk={Bx0T*A4!d(Z!ubWfrg}uy1P4aKOJ#jI;QUY` ze+yj8PmpSjM&VI@4cVR8r>0oR`nx|tA?B((K+Ps|2|%b1(hld0l?2MOhkylRtNg=! z8L;$vK0{eVxzHYb_lv*>?$wOO*NpPCGxsRA^|8E6b<+p?z@0HyRi}a5qJWa;f9S%p zU}C?u7(%uY>>R5DnG|a2%gGH(VqRCy=hrz`V->VlkLJ%^TEo#V0LNZSat_H3Ei>V> z1;Q7B^brDx*vROipP+*anbV({TPh~dl6Cv}9p(-?v<2M>92%Tpdct?~@#h|`Lm$E< zjv}lzjK+qb@5j1^-8W4cIFnV}ksKE=3OUmpYZIediB}#H*yQA)O@Mogwm0V>SjG|r zPAnNmb9H7Di$MngCroq90SL&yGQSJ&U`%nB7R zRrtIiJ%MjOaIKvK(%n>2*2bez;lJJ znX?L6N4moHLeV-&?I^4`5{H<50=<7Q77<6UHYX;3?Q1dLr9{F_hrq9`LM#JSmr=ws zkxfJ!IaOz~MvbqG5^$v!yG!^B+eXN>l6rUqT4=fe5Kn}4nUp3GQ}p!H4JTq#3IPC1 z_}27Md@k5^_AhWxe zhwH}n!f&jHrZ!c1y6O>RGB?SZHC~1$C_Ml!!4o!1baHT^o1%CpAB28V66lSa$ohnY zdn2^X@y4ITpY0V?Nqm-dTd+bRWKKgURR!GHh|n$jAWSwnagp$uq6xeH=R;c<*Q^fJ zhp}4<%NJlt8^njy2_Ec$oz+~Kp#N1qT&m^sNK%rSm0O-34u zZ>{4#E3IQtW5%c(-Vi%wX!^igPEMgZ3eKeXMP%cEcO7Fjo3mjG?A`$EhLgSU4P!#- z{Hm~T#!6+|y$leC;38OMrCZY*^--*5FIKgz!YtW1+k|LwTnbb=P3K}-$hMU&pl7`3 zB zx_hxB!rgr1gUQhXhBY8c^PzwTS*ljP+_T>P-uM)>SJn4!RgM^^ZE@a1qxG)sYHW88 zk)R5S`<^bcr2OVP;pw2GvRqjp(S^=}n=&Tn*z@)YM6y%sIO20_2jcw%Nqplt7;fi< zlyo-<-Idn2M6EK@e%gT6PcatRKK3W{VP$+NDd=6dla;>Ljt)&+@7L}=a)rtM1hxM# zCga`!a<^n#SGwL|bJt`OX99_!ck+3sZj$93wh73t{pf) zaZhLAQG-5tu9>gLBtCw235ic&Gib}j6b)N%j`KA*=7(e#6GvQrB=Hj@T|k?6RJNkQ z||)g80;20hAPA_ zpN={*!YuvB+%eP~eGlTwcFW13<}yr1_nm?pva`x#0G^#`pYejWD4877)CR#uzk+&q ze#_3M?W(_877HA=Zv`u(ndT$wS^Vy8Y7ei|-AiHf2fL>uo~=V>?O=C+^YZKIM}Yeo z%4=gM#SOrVG%6;%(DbOg_rgEjS3TRK(AGVvf)xIgmtg{fW9W>oU7Bp0O}IMFok7*a z<}rtN`-!`~Uh=Ga}wAik#JSURS`o$}j}-P?kXavF6k$~wls14#PQypB8Tn(06k z8eVe(a1Ov%;4^-WP;9{KXMq}buu^##O9(c9u~~abDkWAoy1E~p{TfSF%~Sb_=4m

o&Z{#y&=zn3X2mMok<165{NXpxIa-&}!A^Vd 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 %\VignetteEncoding{UTF-8} --- -## `teal` Apps With the Filter Panel +## `teal` apps with the filter panel The filter panel is an integral part of all `teal` applications and is included on the right side. Based on the selections made in the filter panel, filter expressions are executed before passing data to `teal` modules. diff --git a/vignettes/getting-started-with-teal.Rmd b/vignettes/getting-started-with-teal.Rmd index d3c65345da..50873c00c4 100644 --- a/vignettes/getting-started-with-teal.Rmd +++ b/vignettes/getting-started-with-teal.Rmd @@ -76,7 +76,7 @@ In the example below: The key function to use to create your `teal` application is `init`, which requires two arguments: `data` and `modules`. -### Application Data +### Application data The `data` argument to the `init` function specifies the data used by your application. In the example above this is data that exists in the global environment. @@ -95,7 +95,7 @@ The `modules` argument to `init` consists of a list of `teal` modules (which can We recommend creating applications using predefined `teal` modules. See the references below for links to these modules. -### Defining Filters +### Defining filters The optional `filter` argument in `init` allows you to initialize the application with predefined filters. See the documentation for `init` for further details. diff --git a/vignettes/including-data-in-teal-applications.Rmd b/vignettes/including-data-in-teal-applications.Rmd index 86bc7c281f..0e317438cf 100644 --- a/vignettes/including-data-in-teal-applications.Rmd +++ b/vignettes/including-data-in-teal-applications.Rmd @@ -28,7 +28,7 @@ All applications use the `teal_data` class as a data container. `teal_data` objects are passed to `init` to build the application, where they are modified by the filter panel (if applicable) and passed on to modules. Thus, the first step of building a `teal` app is creating a `teal_data` object. -### General Data +### General data A `teal_data` object is created by calling the `teal_data` function and passing data objects as `name:value` pairs. @@ -54,7 +54,7 @@ app <- init( shinyApp(app$ui, app$server) ``` -### Reproducible Data +### Reproducible data A `teal_data` stores data in a separate environment. Therefore, modifying the stored datasets requires that code be evaluated in that environment. @@ -93,7 +93,7 @@ data_from_file <- teal_data() data_from_file <- eval_code(data, readLines("")) ``` -### Creating Data In-App +### Creating data in-app The one departure from passing a `teal_data` object to `init` is when the data does not exist in the environment where the app is run, _e.g._ when it has to be pulled from a remote source. In those cases a `teal_data_module` must be used. @@ -101,11 +101,11 @@ See [this vignette](data-as-shiny-module.html) for a detailed description.
-## Clinical Data +## Clinical data Currently `teal` supports two specialized data formats. -### `ADaM` Data +### `ADaM` data The `ADaM` data model specifies relationships between `CDISC` datasets. The `cdisc_data` function takes advantage of that fact to to automatically set default joining keys (see [`join_keys` property](#join_keys)). @@ -128,7 +128,7 @@ app <- init( shinyApp(app$ui, app$server) ``` -### `MultiAssayExperiment` Data +### `MultiAssayExperiment` data The `MultiAssayExperiment` package offers a data structure for representing and analyzing multi-omics experiments: a biological analysis approach utilizing multiple types of observations, such as DNA mutations and abundance of RNA and proteins, in the same biological specimens. @@ -241,6 +241,6 @@ For a detailed explanation of verification, see [this `teal.data` vignette](http
-## Further Reading +## Further reading For a complete guide to the `teal_data` class, please refer to the [`teal.data` package](https://insightsengineering.github.io/teal.data/latest-tag/). From 1f99e5a404f3e700beec6d147f1ec63422f7ee51 Mon Sep 17 00:00:00 2001 From: go_gonzo Date: Fri, 8 Dec 2023 13:37:04 +0100 Subject: [PATCH 33/36] - bump up teal.slice and teal.data - teal.transform bump not needed --- DESCRIPTION | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 8f050d1fa3..681336ee15 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -31,8 +31,8 @@ BugReports: https://github.com/insightsengineering/teal/issues Depends: R (>= 4.0), shiny (>= 1.7.0), - teal.data (>= 0.3.0.9011), - teal.slice (>= 0.4.0.9023), + teal.data (>= 0.3.0.9017), + teal.slice (>= 0.4.0.9027), teal.transform (>= 0.4.0.9007) Imports: checkmate (>= 2.1.0), From 25b06ca3773ab994a87c34c90cb225c01faaaca2 Mon Sep 17 00:00:00 2001 From: go_gonzo Date: Fri, 8 Dec 2023 13:47:37 +0100 Subject: [PATCH 34/36] vbump teal.transform dependency --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 681336ee15..0eac74ef04 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -33,7 +33,7 @@ Depends: shiny (>= 1.7.0), teal.data (>= 0.3.0.9017), teal.slice (>= 0.4.0.9027), - teal.transform (>= 0.4.0.9007) + teal.transform (>= 0.4.0.9010) Imports: checkmate (>= 2.1.0), jsonlite, From 70cee9b640d71d6abd2f55f3f5ca3ff5f8c1eb5e Mon Sep 17 00:00:00 2001 From: go_gonzo Date: Fri, 8 Dec 2023 13:53:23 +0100 Subject: [PATCH 35/36] empty From 58282cbd5c58334a2f6d51301048c845e190bf43 Mon Sep 17 00:00:00 2001 From: go_gonzo Date: Fri, 8 Dec 2023 13:57:52 +0100 Subject: [PATCH 36/36] empty