R Under development (unstable) (2025-10-13 r88918 ucrt) -- "Unsuffered Consequences" Copyright (C) 2025 The R Foundation for Statistical Computing Platform: x86_64-w64-mingw32/x64 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(unittest) > > library(gadget3) > > prey_a <- g3_stock('prey_a', seq(1, 10)) |> g3s_age(1,3) > pred_a <- g3_stock('pred_a', seq(50, 80, by = 10)) |> g3s_age(0, 10) > fl <- g3_fleet('fl') > > actions <- list( + g3a_time(2000, 2005, step_lengths = c(6,6), project_years = 0), + g3a_age(prey_a), + g3a_age(pred_a), + gadget3:::g3a_initialconditions_manual(prey_a, ~1e5 * prey_a__midlen, ~100), + gadget3:::g3a_initialconditions_manual(pred_a, ~1e-2 * pred_a__midlen, ~1000), + + g3a_growmature(prey_a, impl_f = gadget3::g3a_grow_impl_bbinom( + maxlengthgroupgrowth = 2L) ), + g3a_growmature(pred_a, impl_f = gadget3::g3a_grow_impl_bbinom( + delta_wgt_f = g3a_grow_weight_weightjones(), + maxlengthgroupgrowth = 2L) ), + + g3a_predate( + pred_a, + list(prey_a), + suitabilities = 1, + catchability_f = g3a_predate_catchability_predator() ), + + g3a_predate( + fl, + list(pred_a), + suitabilities = 1, + catchability_f = g3a_predate_catchability_totalfleet(g3_parameterized("fl_landings", value = 0, optimise = FALSE)) ), + + g3l_understocking(list(prey_a, pred_a)) ) > full_actions <- c(actions, list( + g3a_report_detail(actions), + g3a_report_history(actions, "__num$|__wgt$", out_prefix="dend_"), # NB: Late reporting + g3a_report_history(actions, "quota_", out_prefix = NULL), + # g3a_trace_var(actions, check_positive = TRUE, var_re = c("__wgt$"), on_error = "stop"), + NULL)) > model_fn <- g3_to_r(full_actions) > model_cpp <- g3_to_tmb(full_actions) > > attr(model_cpp, "parameter_template") |> + g3_init_val("*.Linf", 10, spread = 0.2) |> + g3_init_val("*.K", 0.3, lower = 0.04, upper = 1.2) |> + # NB: Fish pred_a to extinction + g3_init_val("fl_landings", 1e5) |> + + g3_init_val("*.walpha", 0.01, optimise = FALSE) |> + g3_init_val("*.wbeta", 3, optimise = FALSE) |> + g3_init_val("*.weightjones.q0", 0.7991596) |> + g3_init_val("*.weightjones.q1", 0.05000146) |> + g3_init_val("*.weightjones.q2", 2.845905) |> + g3_init_val("*.weightjones.q3", 0.75) |> + g3_init_val("*.weightjones.q4", 0) |> + g3_init_val("*.weightjones.q5", 0) |> + identity() -> params.in > > nll <- model_fn(params.in) ; r <- attributes(nll) ; nll <- as.vector(nll) > > ok(ut_cmp_equal(as.vector(g3_array_agg(r$dstart_pred_a__num, c("time"))), as.vector(c( + `2000-01` = 30.8, `2000-02` = 1.54, `2001-01` = 0.077, `2001-02` = 0.00385, + `2002-01` = 0.0001925, `2002-02` = 9.625e-06, `2003-01` = 4.813e-07, + `2003-02` = 2.41e-08, `2004-01` = 1.2e-09, `2004-02` = 1e-10, + `2005-01` = 0, `2005-02` = 0, + NULL ))), "dstart_pred_a__num: Fished to extinction, remains finite") ok - dstart_pred_a__num: Fished to extinction, remains finite > ok(ut_cmp_equal(as.vector(g3_array_agg(r$dstart_pred_a__wgt, c("time"))), as.vector(c( + `2000-01` = 44000, `2000-02` = 43999.9999999995, `2001-01` = 39982.1098368574, + `2001-02` = 4704.465940942, `2002-01` = 22.6095830583, `2002-02` = 0.0085358984, + `2003-01` = 0.0001959993, `2003-02` = 1.5617e-05, `2004-01` = 4.261e-07, + `2004-02` = 3.91e-08, `2005-01` = 9e-10, `2005-02` = 1e-09, + NULL ))), "dstart_pred_a__wgt: Fished to extinction, remains finite") ok - dstart_pred_a__wgt: Fished to extinction, remains finite > > gadget3:::ut_tmb_r_compare2(model_fn, model_cpp, params.in, g3_test_tmb = 2) # skip: not running TMB tests 0 < 2 NULL > > proc.time() user system elapsed 2.78 0.12 2.89 1..2 # Looks like you passed all 2 tests.