///|
fn main {
let fixture = @src.benchmark_fixture(5000)
let start_km = @env.now()
let km = @src.kaplan_meier(fixture.data)
let end_km = @env.now()
let start_na = @env.now()
let na = @src.nelson_aalen(fixture.data)
let end_na = @env.now()
let cox_sample = @src.simulate_cox(
500,
[0.55, -0.35, 0.2],
0.06,
0.02,
20260818U,
)
let start_cox = @env.now()
let fit = @src.cox_fit(cox_sample.data, max_iterations=30)
let end_cox = @env.now()
let diagnostics = fixture.diagnostics(30.0)
let start_parametric = @env.now()
let parametric = @src.fit_parametric_exponential(fixture.data)
let end_parametric = @env.now()
let start_ipcw = @env.now()
let ipcw = @src.ipcw_weights(fixture.data)
let ipcw_steps = @src.ipcw_kaplan_meier(ipcw)
let end_ipcw = @env.now()
let start_group = @env.now()
let groups = @src.survival_group_km(
[fixture.data, fixture.data],
["replicated_a", "replicated_b"],
30.0,
)
let end_group = @env.now()
println("MoonBit survival benchmark fixture")
println("sample_size=\{fixture.data.length()}")
println("events=\{fixture.data.event_count()}")
println("censoring_fraction=\{diagnostics.censoring_fraction}")
println(
"kaplan_meier_steps=\{km.steps.length()},elapsed_ms=\{end_km - start_km}",
)
println(
"nelson_aalen_steps=\{na.steps.length()},elapsed_ms=\{end_na - start_na}",
)
println(
"cox_n=\{cox_sample.data.length()},iterations=\{fit.iterations},converged=\{fit.converged},elapsed_ms=\{end_cox - start_cox}",
)
println("cox_coefficient_count=\{fit.coefficients.length()}")
println("rmst_30=\{diagnostics.observed_rmst}")
println(
"parametric_family=\{@src.parametric_family_name(parametric.family)},elapsed_ms=\{end_parametric - start_parametric}",
)
println(
"ipcw_rows=\{ipcw.length()},ipcw_steps=\{ipcw_steps.length()},effective_n=\{ipcw.effective_n()},elapsed_ms=\{end_ipcw - start_ipcw}",
)
println(
"group_curves=\{groups.length()},group_survival_30=\{groups[0].survival_at_horizon},elapsed_ms=\{end_group - start_group}",
)
}