From 0853cf36f475060dc27b332643f4f92458f8e223 Mon Sep 17 00:00:00 2001 From: Anna Krystalli Date: Thu, 12 Dec 2024 09:56:30 +0200 Subject: [PATCH 1/3] :bug: Separate v4 req vals checks by output type. Resolves #177 --- R/check_tbl_values_required.R | 67 +- .../testthat/test-check_tbl_values_required.R | 24 + .../testdata/hub-177/hub-config/admin.json | 25 + .../testdata/hub-177/hub-config/tasks.json | 620 ++++++++++++++++++ .../2024-12-14-FluSight-baseline.parquet | Bin 0 -> 82937 bytes 5 files changed, 713 insertions(+), 23 deletions(-) create mode 100644 tests/testthat/testdata/hub-177/hub-config/admin.json create mode 100644 tests/testthat/testdata/hub-177/hub-config/tasks.json create mode 100644 tests/testthat/testdata/hub-177/model-output/FluSight-baseline/2024-12-14-FluSight-baseline.parquet diff --git a/R/check_tbl_values_required.R b/R/check_tbl_values_required.R index 9e360cac..5a317cc8 100644 --- a/R/check_tbl_values_required.R +++ b/R/check_tbl_values_required.R @@ -39,13 +39,54 @@ check_tbl_values_required <- function(tbl, round_id, file_path, hub_path, force_output_types <- TRUE } else { # For pre v4 configs, we use the legacy settings and rules. - output_types <- NULL + output_types <- list(NULL) force_output_types <- FALSE } + + # Iterate over output types in v4. This reduces memory pressure and also + # keeps output type evaluation separate, resolving the bug reported in #177. + # v3 and below is unaffected and validation proceeds as before using the full + # modeling task expanded grid + missing_df <- purrr::map(output_types, \(.x) { + check_required_output_type_by_modeling_task( + tbl = tbl, + config_tasks = config_tasks, + round_id = round_id, + output_type = .x, + derived_task_ids = derived_task_ids, + force_output_types = force_output_types + ) + }) %>% + purrr::list_rbind() + + check <- nrow(missing_df) == 0L + + if (check) { + details <- NULL + } else { + missing_df <- coerce_to_hub_schema(missing_df, config_tasks) + details <- cli::format_inline("See {.var missing} attribute for details.") + } + + capture_check_cnd( + check = check, + file_path = file_path, + msg_subject = "Required task ID/output type/output type ID combinations", + msg_attribute = NULL, + msg_verbs = c("all present.", "missing."), + details = details, + missing = missing_df + ) +} + +check_required_output_type_by_modeling_task <- function(tbl, config_tasks, + round_id, output_type, + derived_task_ids, + force_output_types) { req <- expand_model_out_grid( config_tasks, round_id = round_id, - output_types = output_types, + output_types = output_type, required_vals_only = TRUE, force_output_types = force_output_types, all_character = TRUE, @@ -56,7 +97,7 @@ check_tbl_values_required <- function(tbl, round_id, file_path, hub_path, full <- expand_model_out_grid( config_tasks, round_id = round_id, - output_types = output_types, + output_types = output_type, required_vals_only = FALSE, all_character = TRUE, as_arrow_table = FALSE, @@ -71,25 +112,6 @@ check_tbl_values_required <- function(tbl, round_id, file_path, hub_path, check_modeling_task_values_required ) %>% purrr::list_rbind() - - check <- nrow(missing_df) == 0L - - if (check) { - details <- NULL - } else { - missing_df <- coerce_to_hub_schema(missing_df, config_tasks) - details <- cli::format_inline("See {.var missing} attribute for details.") - } - - capture_check_cnd( - check = check, - file_path = file_path, - msg_subject = "Required task ID/output type/output type ID combinations", - msg_attribute = NULL, - msg_verbs = c("all present.", "missing."), - details = details, - missing = missing_df - ) } check_modeling_task_values_required <- function(tbl, req, full) { @@ -173,7 +195,6 @@ get_opt_col_list <- function(x, mask, full, req) { # Identify missing required values for optional value combinations. # Output full missing rows compiled from optional values and missing required values. missing_req_rows <- function(opt_cols, x, mask, req, full) { - if (all(opt_cols == FALSE)) { return(req[!conc_rows(req) %in% conc_rows(x), ]) } diff --git a/tests/testthat/test-check_tbl_values_required.R b/tests/testthat/test-check_tbl_values_required.R index 67da1bf5..332518bd 100644 --- a/tests/testthat/test-check_tbl_values_required.R +++ b/tests/testthat/test-check_tbl_values_required.R @@ -373,3 +373,27 @@ test_that("Reading derived_task_ids from config works", { check_tbl_values_required(tbl, round_id, file_path, hub_path) ) }) + +test_that("v4 config output type leak fixed (#177)", { + hub_path <- test_path("testdata", "hub-177") + file_path <- "FluSight-baseline/2024-12-14-FluSight-baseline.parquet" + round_id <- "2024-12-14" + tbl <- read_model_out_file( + file_path = file_path, + hub_path = hub_path, + coerce_types = "chr" + ) + res <- check_tbl_values_required(tbl, + round_id = round_id, + file_path = file_path, hub_path = hub_path + ) + + expect_s3_class(res, + c( + "check_success", "hub_check", + "rlang_message", "message", + "condition" + ), + exact = TRUE + ) +}) diff --git a/tests/testthat/testdata/hub-177/hub-config/admin.json b/tests/testthat/testdata/hub-177/hub-config/admin.json new file mode 100644 index 00000000..0d640928 --- /dev/null +++ b/tests/testthat/testdata/hub-177/hub-config/admin.json @@ -0,0 +1,25 @@ +{ + "schema_version": "https://raw.githubusercontent.com/hubverse-org/schemas/main/v4.0.0/admin-schema.json", + "name": "US CDC FluSight", + "maintainer": "US CDC", + "contact": { + "name": "Joe bloggs", + "email": "jb2@cdc.gov" + }, + "repository": { + "host": "github", + "owner": "cdcepi", + "repository": "FluSight-forecast-hub" + }, + "file_format": ["csv", "parquet"], + "timezone": "US/Eastern", + "model_output_dir": "model-output", + "cloud": { + "enabled": true, + "host": { + "name": "aws", + "storage_service": "s3", + "storage_location": "cdcepi-flusight-forecast-hub" + } + } +} diff --git a/tests/testthat/testdata/hub-177/hub-config/tasks.json b/tests/testthat/testdata/hub-177/hub-config/tasks.json new file mode 100644 index 00000000..222ef585 --- /dev/null +++ b/tests/testthat/testdata/hub-177/hub-config/tasks.json @@ -0,0 +1,620 @@ +{ + "schema_version": "https://raw.githubusercontent.com/hubverse-org/schemas/main/v4.0.0/tasks-schema.json", + "rounds": [ + { + "round_id_from_variable": true, + "round_id": "reference_date", + "model_tasks": [ + { + "task_ids": { + "reference_date": { + "required": null, + "optional": [ + "2023-10-07", "2023-10-14", "2023-10-21", "2023-10-28", "2023-11-04", + "2023-11-11", "2023-11-18", "2023-11-25", "2023-12-02", + "2023-12-09", "2023-12-16", "2023-12-23", "2023-12-30", + "2024-01-06", "2024-01-13", "2024-01-20", "2024-01-27", + "2024-02-03", "2024-02-10", "2024-02-17", "2024-02-24", + "2024-03-02", "2024-03-09", "2024-03-16", "2024-03-23", + "2024-03-30", "2024-04-06", "2024-04-13", "2024-04-20", + "2024-04-27", "2024-05-04", "2024-05-11", + "2024-11-16", "2024-11-23", "2024-11-30", "2024-12-07", "2024-12-14", + "2024-12-21", "2024-12-28", "2025-01-04", "2025-01-11", + "2025-01-18", "2025-01-25", "2025-02-01", "2025-02-08", + "2025-02-15", "2025-02-22", "2025-03-01", "2025-03-08", + "2025-03-15", "2025-03-22", "2025-03-29", "2025-04-05", + "2025-04-12", "2025-04-19", "2025-04-26", "2025-05-03", + "2025-05-10", "2025-05-17", "2025-05-24", "2025-05-31" + + ] + }, + "target": { + "required": null, + "optional": ["wk flu hosp rate change"] + }, + "horizon": { + "required": null, + "optional": [-1, 0, 1, 2, 3] + }, + "location": { + "required": null, + "optional": [ + "US", + "01", + "02", + "04", + "05", + "06", + "08", + "09", + "10", + "11", + "12", + "13", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26", + "27", + "28", + "29", + "30", + "31", + "32", + "33", + "34", + "35", + "36", + "37", + "38", + "39", + "40", + "41", + "42", + "44", + "45", + "46", + "47", + "48", + "49", + "50", + "51", + "53", + "54", + "55", + "56", + "72" + ] + }, + "target_end_date": { + "required": null, + "optional": [ + "2023-09-23", "2023-09-30", "2023-10-07", + "2023-10-14", "2023-10-21", "2023-10-28", "2023-11-04", + "2023-11-11", "2023-11-18", "2023-11-25", "2023-12-02", + "2023-12-09", "2023-12-16", "2023-12-23", "2023-12-30", + "2024-01-06", "2024-01-13", "2024-01-20", "2024-01-27", + "2024-02-03", "2024-02-10", "2024-02-17", "2024-02-24", + "2024-03-02", "2024-03-09", "2024-03-16", "2024-03-23", + "2024-03-30", "2024-04-06", "2024-04-13", "2024-04-20", + "2024-04-27", "2024-05-04", "2024-05-11", "2024-05-18", + "2024-05-25", "2024-06-01", + "2024-11-09", "2024-11-16", "2024-11-23", "2024-11-30", + "2024-12-07", "2024-12-14", "2024-12-21", "2024-12-28", + "2025-01-04", "2025-01-11", "2025-01-18", "2025-01-25", + "2025-02-01", "2025-02-08", "2025-02-15", "2025-02-22", + "2025-03-01", "2025-03-08", "2025-03-15", "2025-03-22", + "2025-03-29", "2025-04-05", "2025-04-12", "2025-04-19", + "2025-04-26", "2025-05-03", "2025-05-10", "2025-05-17", + "2025-05-24", "2025-05-31", "2025-06-07", "2025-06-14", + "2025-06-21" + ] + } + }, + "output_type": { + "pmf": { + "output_type_id": { + "required": [ + "large_decrease", + "decrease", + "stable", + "increase", + "large_increase" + ] + }, + "value": { + "type": "double", + "minimum": 0, + "maximum": 1 + }, + "is_required": true + } + }, + "target_metadata": [ + { + "target_id": "flu hosp rate change", + "target_name": "week ahead weekly influenza hospitalization rate change", + "target_units": "rate per 100,000 population", + "target_keys": { + "target": "wk flu hosp rate change" + }, + "target_type": "ordinal", + "description": "This target represents the change in the rate of new hospitalizations per week comparing the week ending on the reference_date to the week ending [horizon] weeks after the reference_date, on target_end_date.", + "is_step_ahead": true, + "time_unit": "week" + } + ] + }, + { + "task_ids": { + "reference_date": { + "required": null, + "optional": [ + "2023-10-07", "2023-10-14", "2023-10-21", "2023-10-28", "2023-11-04", + "2023-11-11", "2023-11-18", "2023-11-25", "2023-12-02", + "2023-12-09", "2023-12-16", "2023-12-23", "2023-12-30", + "2024-01-06", "2024-01-13", "2024-01-20", "2024-01-27", + "2024-02-03", "2024-02-10", "2024-02-17", "2024-02-24", + "2024-03-02", "2024-03-09", "2024-03-16", "2024-03-23", + "2024-03-30", "2024-04-06", "2024-04-13", "2024-04-20", + "2024-04-27", "2024-05-04", "2024-05-11", + "2024-11-16", "2024-11-23", "2024-11-30", "2024-12-07", "2024-12-14", + "2024-12-21", "2024-12-28", "2025-01-04", "2025-01-11", + "2025-01-18", "2025-01-25", "2025-02-01", "2025-02-08", + "2025-02-15", "2025-02-22", "2025-03-01", "2025-03-08", + "2025-03-15", "2025-03-22", "2025-03-29", "2025-04-05", + "2025-04-12", "2025-04-19", "2025-04-26", "2025-05-03", + "2025-05-10", "2025-05-17", "2025-05-24", "2025-05-31" + + ] + }, + "target": { + "required": null, + "optional": ["wk inc flu hosp"] + }, + "horizon": { + "required": null, + "optional": [-1, 0, 1, 2, 3] + }, + "location": { + "required": null, + "optional": [ + "US", + "01", + "02", + "04", + "05", + "06", + "08", + "09", + "10", + "11", + "12", + "13", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26", + "27", + "28", + "29", + "30", + "31", + "32", + "33", + "34", + "35", + "36", + "37", + "38", + "39", + "40", + "41", + "42", + "44", + "45", + "46", + "47", + "48", + "49", + "50", + "51", + "53", + "54", + "55", + "56", + "72" + ] + }, + "target_end_date": { + "required": null, + "optional": [ + "2023-09-23", "2023-09-30", "2023-10-07", + "2023-10-14", "2023-10-21", "2023-10-28", "2023-11-04", + "2023-11-11", "2023-11-18", "2023-11-25", "2023-12-02", + "2023-12-09", "2023-12-16", "2023-12-23", "2023-12-30", + "2024-01-06", "2024-01-13", "2024-01-20", "2024-01-27", + "2024-02-03", "2024-02-10", "2024-02-17", "2024-02-24", + "2024-03-02", "2024-03-09", "2024-03-16", "2024-03-23", + "2024-03-30", "2024-04-06", "2024-04-13", "2024-04-20", + "2024-04-27", "2024-05-04", "2024-05-11", "2024-05-18", + "2024-05-25", "2024-06-01", + "2024-11-09", "2024-11-16", "2024-11-23", "2024-11-30", + "2024-12-07", "2024-12-14", "2024-12-21", "2024-12-28", + "2025-01-04", "2025-01-11", "2025-01-18", "2025-01-25", + "2025-02-01", "2025-02-08", "2025-02-15", "2025-02-22", + "2025-03-01", "2025-03-08", "2025-03-15", "2025-03-22", + "2025-03-29", "2025-04-05", "2025-04-12", "2025-04-19", + "2025-04-26", "2025-05-03", "2025-05-10", "2025-05-17", + "2025-05-24", "2025-05-31", "2025-06-07", "2025-06-14", + "2025-06-21" + + ] + } + }, + "output_type": { + "quantile": { + "output_type_id": { + "required": [ + 0.01, + 0.025, + 0.05, + 0.1, + 0.15, + 0.2, + 0.25, + 0.3, + 0.35, + 0.4, + 0.45, + 0.5, + 0.55, + 0.6, + 0.65, + 0.7, + 0.75, + 0.8, + 0.85, + 0.9, + 0.95, + 0.975, + 0.99 + ] + }, + "value": { + "type": "double", + "minimum": 0 + }, + "is_required": true + }, + "sample": { + "output_type_id_params": { + "type": "integer", + "min_samples_per_task": 100, + "max_samples_per_task": 100, + "compound_taskid_set" : ["reference_date", "location", "target"] + }, + "value": { + "type": "integer", + "minimum": 0 + }, + "is_required": false + } + }, + "target_metadata": [ + { + "target_id": "wk inc flu hosp", + "target_name": "incident influenza hospitalizations", + "target_units": "count", + "target_keys": { + "target": "wk inc flu hosp" + }, + "target_type": "continuous", + "description": "This target represents the count of new hospitalizations in the week ending on the date [horizon] weeks after the reference_date, on the target_end_date.", + "is_step_ahead": true, + "time_unit": "week" + } + ] + }, + { + "task_ids": { + "reference_date": { + "required": null, + "optional": [ + "2023-10-07", "2023-10-14", "2023-10-21", "2023-10-28", "2023-11-04", + "2023-11-11", "2023-11-18", "2023-11-25", "2023-12-02", + "2023-12-09", "2023-12-16", "2023-12-23", "2023-12-30", + "2024-01-06", "2024-01-13", "2024-01-20", "2024-01-27", + "2024-02-03", "2024-02-10", "2024-02-17", "2024-02-24", + "2024-03-02", "2024-03-09", "2024-03-16", "2024-03-23", + "2024-03-30", "2024-04-06", "2024-04-13", "2024-04-20", + "2024-04-27", "2024-05-04", "2024-05-11", + "2024-11-16", "2024-11-23", "2024-11-30", "2024-12-07", "2024-12-14", + "2024-12-21", "2024-12-28", "2025-01-04", "2025-01-11", + "2025-01-18", "2025-01-25", "2025-02-01", "2025-02-08", + "2025-02-15", "2025-02-22", "2025-03-01", "2025-03-08", + "2025-03-15", "2025-03-22", "2025-03-29", "2025-04-05", + "2025-04-12", "2025-04-19", "2025-04-26", "2025-05-03", + "2025-05-10", "2025-05-17", "2025-05-24", "2025-05-31" + + ] + }, + "target": { + "required": null, + "optional": ["peak inc flu hosp"] + }, + "horizon": { + "required": null, + "optional": null + }, + "location": { + "required": null, + "optional": [ + "US", + "01", + "02", + "04", + "05", + "06", + "08", + "09", + "10", + "11", + "12", + "13", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26", + "27", + "28", + "29", + "30", + "31", + "32", + "33", + "34", + "35", + "36", + "37", + "38", + "39", + "40", + "41", + "42", + "44", + "45", + "46", + "47", + "48", + "49", + "50", + "51", + "53", + "54", + "55", + "56", + "72" + ] + }, + "target_end_date": { + "required": null, + "optional": null + } + }, + "output_type": { + "quantile": { + "output_type_id": { + "required": [ + 0.01, + 0.025, + 0.05, + 0.1, + 0.15, + 0.2, + 0.25, + 0.3, + 0.35, + 0.4, + 0.45, + 0.5, + 0.55, + 0.6, + 0.65, + 0.7, + 0.75, + 0.8, + 0.85, + 0.9, + 0.95, + 0.975, + 0.99 + ] + }, + "value": { + "type": "double", + "minimum": 0 + }, + "is_required": true + } + }, + "target_metadata": [ + { + "target_id": "peak inc flu hosp", + "target_name": "incident influenza hospitalizations in the season week with the highest hospitalizations", + "target_units": "count", + "target_keys": { + "target": "peak inc flu hosp" + }, + "target_type": "continuous", + "description": "This target represents the count of new hospitalizations in the week of the season with the highest reported hospitalizations.", + "is_step_ahead": false + } + ] + }, + { + "task_ids": { + "reference_date": { + "required": null, + "optional": [ + "2023-10-07", "2023-10-14", "2023-10-21", "2023-10-28", "2023-11-04", + "2023-11-11", "2023-11-18", "2023-11-25", "2023-12-02", + "2023-12-09", "2023-12-16", "2023-12-23", "2023-12-30", + "2024-01-06", "2024-01-13", "2024-01-20", "2024-01-27", + "2024-02-03", "2024-02-10", "2024-02-17", "2024-02-24", + "2024-03-02", "2024-03-09", "2024-03-16", "2024-03-23", + "2024-03-30", "2024-04-06", "2024-04-13", "2024-04-20", + "2024-04-27", "2024-05-04", "2024-05-11", + "2024-11-16", "2024-11-23", "2024-11-30", "2024-12-07", "2024-12-14", + "2024-12-21", "2024-12-28", "2025-01-04", "2025-01-11", + "2025-01-18", "2025-01-25", "2025-02-01", "2025-02-08", + "2025-02-15", "2025-02-22", "2025-03-01", "2025-03-08", + "2025-03-15", "2025-03-22", "2025-03-29", "2025-04-05", + "2025-04-12", "2025-04-19", "2025-04-26", "2025-05-03", + "2025-05-10", "2025-05-17", "2025-05-24", "2025-05-31" + + ] + }, + "target": { + "required": null, + "optional": ["peak week inc flu hosp"] + }, + "horizon": { + "required": null, + "optional": null + }, + "location": { + "required": null, + "optional": [ + "US", + "01", + "02", + "04", + "05", + "06", + "08", + "09", + "10", + "11", + "12", + "13", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26", + "27", + "28", + "29", + "30", + "31", + "32", + "33", + "34", + "35", + "36", + "37", + "38", + "39", + "40", + "41", + "42", + "44", + "45", + "46", + "47", + "48", + "49", + "50", + "51", + "53", + "54", + "55", + "56", + "72" + ] + }, + "target_end_date": { + "required": null, + "optional": null + } + }, + "output_type": { + "pmf": { + "output_type_id": { + "required": [ + "2024-11-23", + "2024-11-30", "2024-12-07", "2024-12-14", + "2024-12-21", "2024-12-28", "2025-01-04", + "2025-01-11", "2025-01-18", "2025-01-25", + "2025-02-01", "2025-02-08", "2025-02-15", + "2025-02-22", "2025-03-01", "2025-03-08", + "2025-03-15", "2025-03-22", "2025-03-29", + "2025-04-05", "2025-04-12", "2025-04-19", + "2025-04-26", "2025-05-03", "2025-05-10", + "2025-05-17", "2025-05-24", "2025-05-31" + ] + }, + "value": { + "type": "double", + "minimum": 0, + "maximum": 1 + }, + "is_required": true + } + }, + "target_metadata": [ + { + "target_id": "peak week inc flu hosp", + "target_name": "season week with the highest hospitalizations", + "target_units": "count", + "target_keys": { + "target": "peak week inc flu hosp" + }, + "target_type": "date", + "description": "This target represents the week of the season with the highest reported hospitalizations. This is the Saturday ending the epidemic week with the highest reported hospitalization count.", + "is_step_ahead": false + } + ] + } + ], + "submissions_due": { + "relative_to": "reference_date", + "start": -6, + "end": -3 + } + } + ], + "derived_task_ids": ["target_end_date"] +} diff --git a/tests/testthat/testdata/hub-177/model-output/FluSight-baseline/2024-12-14-FluSight-baseline.parquet b/tests/testthat/testdata/hub-177/model-output/FluSight-baseline/2024-12-14-FluSight-baseline.parquet new file mode 100644 index 0000000000000000000000000000000000000000..acd340fe84896a0045c7f9b7c89afd7f6f1acbf2 GIT binary patch literal 82937 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%0A=APDa}@Hql;e}-G~r1KwuCXjWUmKBP^`ji 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 Date: Thu, 12 Dec 2024 10:09:01 +0200 Subject: [PATCH 2/3] Update NEWS --- NEWS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS.md b/NEWS.md index a8e46d0e..64d12510 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,7 @@ # hubValidations (development version) +* Evaluation of whether all combinations of required values have been submitted through `check_tbl_values_required()` is now chunked by output type for v4 config and above. This reduces memory pressure and should speed up required value validation in hubs with complex task.json files. It also fixes the bug reported in #177. + # hubValidations 0.9.0 * Re-exported functions useful for modelers (#149): From 1ac7ee4a772deba346b7b01c84cd135c2d48c9cb Mon Sep 17 00:00:00 2001 From: Anna Krystalli Date: Thu, 12 Dec 2024 10:10:10 +0200 Subject: [PATCH 3/3] fix lintr --- R/check_tbl_values_required.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/check_tbl_values_required.R b/R/check_tbl_values_required.R index 5a317cc8..b68c1df9 100644 --- a/R/check_tbl_values_required.R +++ b/R/check_tbl_values_required.R @@ -107,7 +107,7 @@ check_required_output_type_by_modeling_task <- function(tbl, config_tasks, tbl <- join_tbl_to_model_task(full, tbl, subset_to_tbl_cols = TRUE) - missing_df <- purrr::pmap( + purrr::pmap( combine_mt_inputs(tbl, req, full), check_modeling_task_values_required ) %>%