diff --git a/R/control.R b/R/control.R index 264f92d50..491fd9d54 100644 --- a/R/control.R +++ b/R/control.R @@ -72,9 +72,45 @@ control_grid <- function( res } +# Helper function to print control settings using cli +print_control_settings <- function(x, default = FALSE, defaults = NULL) { + # Get the fields to print + fields <- names(x) + + # Optionally reduce to only non-defaults + if (default && !is.null(defaults)) { + fields <- fields[ + !vapply( + fields, + function(field) { + identical(x[[field]], defaults[[field]]) + }, + logical(1) + ) + ] + } + + # Build formatted lines for each field + for (field in fields) { + value <- x[[field]] + + if (is.function(value)) { + cli::cli_bullets(c(" " = "{.arg {field}}: ")) + } else if (inherits(value, "tune_backend_options")) { + cli::cli_bullets(c(" " = "{.arg {field}}: ")) + } else if (is.null(value)) { + cli::cli_bullets(c(" " = "{.arg {field}}: NULL")) + } else { + cli::cli_bullets(c(" " = "{.arg {field}}: {.val {value}}")) + } + } +} + #' @export -print.control_grid <- function(x, ...) { - cat("grid/resamples control object\n") +print.control_grid <- function(x, default = FALSE, ...) { + cli::cli_text("{.emph Grid/resamples control object}") + defaults <- control_grid() + print_control_settings(x, default = default, defaults = defaults) invisible(x) } @@ -115,8 +151,10 @@ control_last_fit <- function( } #' @export -print.control_last_fit <- function(x, ...) { - cat("last fit control object\n") +print.control_last_fit <- function(x, default = FALSE, ...) { + cli::cli_text("{.emph Last fit control object}") + defaults <- control_last_fit() + print_control_settings(x, default = default, defaults = defaults) invisible(x) } @@ -302,8 +340,10 @@ control_bayes <- } #' @export -print.control_bayes <- function(x, ...) { - cat("bayes control object\n") +print.control_bayes <- function(x, default = FALSE, ...) { + cli::cli_text("{.emph Bayes control object}") + defaults <- control_bayes() + print_control_settings(x, default = default, defaults = defaults) invisible(x) } diff --git a/tests/testthat/_snaps/control.md b/tests/testthat/_snaps/control.md index e747970c7..398ebfc2f 100644 --- a/tests/testthat/_snaps/control.md +++ b/tests/testthat/_snaps/control.md @@ -8,3 +8,162 @@ please set the control setting `save_workflow` to be `FALSE` or change the threshold for this warning (currently 2 MB) with the `workflow_size` argument. +# control object print methods + + Code + control_grid() + Message + Grid/resamples control object + `verbose`: FALSE + `allow_par`: TRUE + `extract`: NULL + `save_pred`: FALSE + `pkgs`: NULL + `save_workflow`: FALSE + `event_level`: "first" + `parallel_over`: NULL + `backend_options`: NULL + `workflow_size`: 100 + +--- + + Code + control_grid(verbose = TRUE, save_pred = TRUE) + Message + Grid/resamples control object + `verbose`: TRUE + `allow_par`: TRUE + `extract`: NULL + `save_pred`: TRUE + `pkgs`: NULL + `save_workflow`: FALSE + `event_level`: "first" + `parallel_over`: NULL + `backend_options`: NULL + `workflow_size`: 100 + +--- + + Code + control_grid(pkgs = c("pkg1", "pkg2"), extract = I) + Message + Grid/resamples control object + `verbose`: FALSE + `allow_par`: TRUE + `extract`: + `save_pred`: FALSE + `pkgs`: "pkg1" and "pkg2" + `save_workflow`: FALSE + `event_level`: "first" + `parallel_over`: NULL + `backend_options`: NULL + `workflow_size`: 100 + +--- + + Code + control_bayes() + Message + Bayes control object + `verbose`: FALSE + `verbose_iter`: FALSE + `allow_par`: TRUE + `no_improve`: 10 + `uncertain`: Inf + `seed`: 51663 + `extract`: NULL + `save_pred`: FALSE + `time_limit`: NA + `pkgs`: NULL + `save_workflow`: FALSE + `save_gp_scoring`: FALSE + `event_level`: "first" + `parallel_over`: NULL + `backend_options`: NULL + `workflow_size`: 100 + +--- + + Code + control_bayes(verbose_iter = TRUE, no_improve = 5, save_gp_scoring = TRUE) + Message + Bayes control object + `verbose`: FALSE + `verbose_iter`: TRUE + `allow_par`: TRUE + `no_improve`: 5 + `uncertain`: Inf + `seed`: 2986 + `extract`: NULL + `save_pred`: FALSE + `time_limit`: NA + `pkgs`: NULL + `save_workflow`: FALSE + `save_gp_scoring`: TRUE + `event_level`: "first" + `parallel_over`: NULL + `backend_options`: NULL + `workflow_size`: 100 + +--- + + Code + control_last_fit() + Message + Last fit control object + `verbose`: FALSE + `allow_par`: FALSE + `extract`: + `save_pred`: TRUE + `pkgs`: NULL + `save_workflow`: FALSE + `event_level`: "first" + `parallel_over`: NULL + `backend_options`: NULL + `workflow_size`: 100 + +--- + + Code + control_last_fit(verbose = TRUE) + Message + Last fit control object + `verbose`: TRUE + `allow_par`: FALSE + `extract`: + `save_pred`: TRUE + `pkgs`: NULL + `save_workflow`: FALSE + `event_level`: "first" + `parallel_over`: NULL + `backend_options`: NULL + `workflow_size`: 100 + +# control object print methods with default = TRUE + + Code + print(control_grid(verbose = TRUE, pkgs = c("pkg1", "pkg2")), default = TRUE) + Message + Grid/resamples control object + `verbose`: TRUE + `pkgs`: "pkg1" and "pkg2" + +--- + + Code + print(control_bayes(verbose_iter = TRUE, no_improve = 5), default = TRUE) + Message + Bayes control object + `verbose_iter`: TRUE + `no_improve`: 5 + `seed`: 13797 + +--- + + Code + print(control_last_fit(verbose = TRUE), default = TRUE) + Message + Last fit control object + `verbose`: TRUE + `extract`: + diff --git a/tests/testthat/test-control.R b/tests/testthat/test-control.R index 8f7f48f37..8b074621b 100644 --- a/tests/testthat/test-control.R +++ b/tests/testthat/test-control.R @@ -38,3 +38,33 @@ test_that("workflow size warning", { ) }) }) + +test_that("control object print methods", { + expect_snapshot(control_grid()) + expect_snapshot(control_grid(verbose = TRUE, save_pred = TRUE)) + expect_snapshot(control_grid(pkgs = c("pkg1", "pkg2"), extract = I)) + + set.seed(123) + expect_snapshot(control_bayes()) + expect_snapshot(control_bayes( + verbose_iter = TRUE, + no_improve = 5, + save_gp_scoring = TRUE + )) + + expect_snapshot(control_last_fit()) + expect_snapshot(control_last_fit(verbose = TRUE)) +}) + +test_that("control object print methods with default = TRUE", { + expect_snapshot(print( + control_grid(verbose = TRUE, pkgs = c("pkg1", "pkg2")), + default = TRUE + )) + set.seed(456) + expect_snapshot(print( + control_bayes(verbose_iter = TRUE, no_improve = 5), + default = TRUE + )) + expect_snapshot(print(control_last_fit(verbose = TRUE), default = TRUE)) +})