Unverified Commit 0bbb02fd authored by Chris's avatar Chris Committed by GitHub
Browse files

[R-package] Ensure print.lgb.Booster() works when objective is not explicitly set (#6850)



* Handling NULL objective when booster is printed, moving test functions out of method tests, creating unique tests for different method situations

* Correcting whitespace

* Adding types for integer slices

* Moving test functions nearer to relevant tests, setting print to be default

* Update R-package/tests/testthat/test_lgb.Booster.R

---------
Co-authored-by: default avatarJames Lamb <jaylamb20@gmail.com>
Co-authored-by: default avatarNikita Titov <nekit94-08@mail.ru>
parent ac241888
......@@ -1235,6 +1235,9 @@ print.lgb.Booster <- function(x, ...) {
if (!handle_is_null) {
obj <- x$params$objective
if (is.null(obj)) {
obj <- "(default)"
}
if (obj == "none") {
obj <- "custom"
}
......
......@@ -1518,25 +1518,24 @@ test_that("boosters with linear models at leaves can be written to RDS and re-lo
expect_identical(preds, preds2)
})
test_that("Booster's print, show, and summary work correctly", {
.have_same_handle <- function(model, other_model) {
.have_same_handle <- function(model, other_model) {
expect_equal(
model$.__enclos_env__$private$handle
, other_model$.__enclos_env__$private$handle
)
}
}
.has_expected_content_for_fitted_model <- function(printed_txt) {
.has_expected_content_for_fitted_model <- function(printed_txt) {
expect_true(any(startsWith(printed_txt, "LightGBM Model")))
expect_true(any(startsWith(printed_txt, "Fitted to dataset")))
}
}
.has_expected_content_for_finalized_model <- function(printed_txt) {
.has_expected_content_for_finalized_model <- function(printed_txt) {
expect_true(any(printed_txt == "LightGBM Model"))
expect_true(any(grepl("Booster handle is invalid", printed_txt, fixed = TRUE)))
}
}
.check_methods_work <- function(model) {
.check_methods_work <- function(model) {
#--- should work for fitted models --- #
......@@ -1584,8 +1583,9 @@ test_that("Booster's print, show, and summary work correctly", {
})
.have_same_handle(ret, model)
.has_expected_content_for_finalized_model(log_txt)
}
}
test_that("Booster's print, show, and summary work correctly for built-in objectives", {
data("mtcars")
model <- lgb.train(
params = list(
......@@ -1616,9 +1616,9 @@ test_that("Booster's print, show, and summary work correctly", {
, nrounds = 5L
)
.check_methods_work(model)
})
# with custom objective
test_that("Booster's print, show, and summary work correctly for custom objective", {
.logregobj <- function(preds, dtrain) {
labels <- get_field(dtrain, "label")
preds <- 1.0 / (1.0 + exp(-preds))
......@@ -1638,6 +1638,7 @@ test_that("Booster's print, show, and summary work correctly", {
))
}
data("iris")
model <- lgb.train(
data = lgb.Dataset(
as.matrix(iris[, -5L])
......@@ -1653,6 +1654,24 @@ test_that("Booster's print, show, and summary work correctly", {
.check_methods_work(model)
})
test_that("Booster's print, show, and summary work correctly when objective is not provided", {
data("iris")
model <- lgb.train(
data = lgb.Dataset(
as.matrix(iris[, seq_len(3L)])
, label = iris[, 4L]
)
, verbose = .LGB_VERBOSITY
, nrounds = 5L
, params = list(num_threads = .LGB_MAX_THREADS)
)
log_txt <- capture.output(print(model))
expect_true(any(log_txt == "Objective: (default)"))
.check_methods_work(model)
})
test_that("LGBM_BoosterGetNumFeature_R returns correct outputs", {
data("mtcars")
model <- lgb.train(
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment