Skip to content

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 29 May 07:58

What's Changed

  • chore!: rename crate ferx-nlme -> ferx-core by @roninsightrx in #5
  • feat(api)!: default estimation method to FOCEI instead of FOCE by @roninsightrx in #6
  • feat(api): add simulate_with_uncertainty for parameter-uncertainty propagation by @roninsightrx in #7
  • feat(io): add portable .fitrx save/load for fit objects by @roninsightrx in #8
  • fix(api): shrinkage to NONMEM convention (uncentered, /n) by @roninsightrx in #9
  • feat(api): standalone run_sir(fit) + source-file integrity check by @roninsightrx in #10
  • feat(pk): add lagtime (NONMEM ALAG) for analytical, AD, and ODE paths by @roninsightrx in #12
  • feat(sde): add SDE support via Extended Kalman Filter and [diffusion] block by @TeunP in #18
  • chore: fix two pre-existing compiler warnings by @TeunP in #26
  • chore(ci): cut Test job from 87 min → expected <15 min by @roninsightrx in #35
  • perf+fix: 100×+ FeRx speedup and correctness fixes from astra-testdata-simulator cross-engine bench [closes #21 partially] by @roninsightrx in #22
  • docs(sde): document ODE unit convention; fix SDE test data scale by @roninsightrx in #31
  • docs(plans): DCM and low-dim Neural ODE design plan by @roninsightrx in #24
  • feat(nn): MLP-based covariate mapper (Phase A M1 step 1) by @roninsightrx in #36
  • perf(estimation): parallelize per-subject NLL evaluations in GN FD gradient via rayon by @TeunP in #25
  • fix(api): warn when EPS shrinkage is notably negative [closes #37] by @roninsightrx in #40
  • feat(stats): add IWRES autocorrelation diagnostic (Durbin-Watson) [closes #3] by @TeunP in #20
  • perf(sir): replace MVN proposal with multivariate Student-t [closes step 9] by @TeunP in #41
  • fix(sir): rustfmt formatting from #41 by @TeunP in #45
  • feat(api): parallel multi-start optimization [step 10] by @TeunP in #42
  • fix(examples): rename warfarin-bloq → warfarin_bloq; add warfarin_if.csv by @TeunP in #46
  • perf(estimation): step 3 — subject-parallel BHHH gradient with analytical omega/sigma by @TeunP in #47
  • perf(estimation): Step 5 — AD gradient in outer optimizer (replaces central-FD) by @TeunP in #48
  • perf(estimation): Step 4 — analytical+structural gradient in SAEM M-step by @TeunP in #49
  • perf(estimation): Step 6 — BHHH Hessian + AD gradient in trust-region optimizer by @TeunP in #50
  • feat(parser): unify omega and sigma initial-value scale; add (sd) annotation by @roninsightrx in #57
  • test(ci): close integration-test blind spot in CI by @TeunP in #54
  • fix(estimation): SLSQP gradient cap to prevent first-iteration overshoot [closes #55] by @roninsightrx in #58
  • feat(nn): Deep Compartment Models (Phase A M1) — consolidates #38, #39, #43, #52 by @roninsightrx in #53
  • fix(estimation): restore best-seen point after NLopt termination [closes #59] by @roninsightrx in #61
  • feat(estimation): add stagnation_guard fit option to disable outer-loop short-circuit by @roninsightrx in #62
  • fix(ad): apply F1 bioavailability in event-driven AD paths [closes #16] by @roninsightrx in #63
  • fix(estimation): SIR samples on free subspace so FIX-ed parameters don't break SIR by @roninsightrx in #64
  • fix(api): drop inline fit summary from library; CLI keeps it [closes #60] by @roninsightrx in #65
  • perf(estimation): pre-warm gradient cache from cost() in trust-region optimizer by @TeunP in #67
  • perf(estimation): Step 7 — replace GN LM damping + line search with TR subproblem by @TeunP in #68
  • perf(estimation): Step 7 — replace GN LM damping + line search with TR subproblem by @TeunP in #69
  • perf(estimation): Step 5b — IOV analytical gradient for outer optimizer by @TeunP in #70
  • perf(estimation): Step 5b — IOV analytical gradient for outer optimizer by @TeunP in #71
  • fix(estimation): re-land Step 5b — IOV analytical gradient with corrected T1 tests by @TeunP in #72
  • feat(estimation): add Importance Sampling marginal log-likelihood (IMP) by @roninsightrx in #66
  • feat(pk): implement steady-state (SS=1) for 1-cpt analytical PK [#74] by @roninsightrx in #75
  • feat(pk): SS for 2-cpt and 3-cpt analytical PK [#74] by @roninsightrx in #77
  • test(pk): SS regression dataset + smoke fit [#74] by @roninsightrx in #78
  • feat(ode,pk): SS=1 for ODE-based and event-driven (TV-cov) paths [#74] by @roninsightrx in #80
  • docs: SS=1 reference + refresh lagtime/data-format pages [closes #74] by @roninsightrx in #81
  • feat(parser): add [scaling] block for unit conversion and amount-based ODEs (Phase 1) by @roninsightrx in #82
  • docs: refresh 2-week feature review (3-cpt PK, trust-region accuracy) by @roninsightrx in #83
  • feat(scaling): multi-analyte / per-CMT scaling (Phase 2) by @roninsightrx in #84
  • feat(estimation): Step 8 — HMC proposals in SAEM E-step by @TeunP in #86
  • fix(tests): post-merge slow-test fixes for IOV column, GN-TR baseline, and warfarin_iov dataset by @TeunP in #88
  • feat(estimation): Step 11 — IOV support for SAEM by @TeunP in #89
  • feat(scaling): AD support for PerCmt and ExpressionScale (Phase 2.5) by @roninsightrx in #85
  • feat(io): support EVID=3 and EVID=4 reset rows [closes #76] by @roninsightrx in #91
  • feat(ode): initial compartment amounts via init(state) = expr by @roninsightrx in #92
  • docs: rebuild docs/book for EVID=3/4 and ODE init(state) by @roninsightrx in #93
  • fix(pk): propagate lagtime into steady-state predictions before lagged dose arrival [closes #15] by @roninsightrx in #94
  • feat(stats): per-CMT residual error models for multi-endpoint PK/PD [closes #14] by @roninsightrx in #96
  • fix(estimation): disable param scaling by default to fix OMEGA under-convergence [closes #99] by @roninsightrx in #100
  • fix(estimation): guard inner-loop against non-finite objective (#97) by @roninsightrx in #102
  • fix(estimation): proper IOV FOCE marginal + variance-component convergence [closes #101] by @roninsightrx in #103
  • refactor(estimation): address Copilot review on IOV marginal (#103 follow-up) by @roninsightrx in #105
  • fix(pk): continuous per-occasion IOV prediction to match NONMEM carryover [#104] by @roninsightrx in #106
  • fix(parser): reject KAPPA_* in ODE Form C output + confirm IOV PRED matches NONMEM [#107] by @roninsightrx in #108
  • feat(api): add ferx check model validator with structured diagnostics by @roninsightrx in #112
  • chore(docs): stop committing built mdBook; build & deploy in CI only by @roninsightrx in #113
  • feat(api): NCA-based automatic starting value estimation (suggest_start A/B/C) by @TeunP in #98
  • docs(estimation): explain SAEM γ and condNLL; show γ symbol in output by @roninsightrx in #114
  • fix(ad): update stale predict_all_event_driven_ad test calls by @roninsightrx in #116
  • fix(api): error when gradient_method=ad requested without autodiff build by @roninsightrx in #118
  • feat(estimation): report resolved gradient route (AD/FD) in startup banner by @roninsightrx in #117
  • docs(installation): build Enzyme toolchain from source, not as a plugin by @roninsightrx in #115
  • fix(estimation): SAEM Ω burn-in to prevent variance collapse on sparse data by @roninsightrx in #119
  • feat(estimation): add reconverge_gradient_interval fit option by @roninsightrx in #124
  • fix(parser): allow block_omega/block_kappa to span multiple lines [closes #121] by @roninsightrx in #125
  • fix(ode): apply bioavailability F at dose entry, matching NONMEM [closes #122] by @roninsightrx in #126
  • feat(stats): add log-transform-both-sides (LTBS) error model [closes #120] by @roninsightrx in #127
  • fix(api): sdtab IPRED honour TV covariates (was wrong on TV-cov subjects) by @roninsightrx in #131
  • fix(focei): switch FOCEI INTER marginal to Almquist 2015 Laplace form by @roninsightrx in #130
  • perf(estimation): analytical gradient for Almquist Laplace FOCEI INTER NLL by @roninsightrx in #132
  • refactor(estimation): lift ODE + per-CMT gates on analytical Laplace gradient by @roninsightrx in #133
  • perf(parser): port ODE RHS to the indexed AST evaluator (8× wall-time on the experiment Emax benchmark) by @roninsightrx in #135
  • perf(parser): bytecode interpreter for the indexed AST hot path (~1.2× on Emax fit) by @roninsightrx in #137
  • perf(parser): port Form C y[CMT=N] readout to the indexed evaluator (~21% on Emax fit) by @roninsightrx in #136
  • perf(parser): consolidate 5 thread_locals into one FerxThreadScratch (~6-9%) by @roninsightrx in #138
  • feat(parser): symbolic AST differentiator (Tier 4a milestone 1) by @roninsightrx in #139
  • feat(parser): indiv-param ∂P/∂η, ∂P/∂θ at parse time (Tier 4a milestone 2) by @roninsightrx in #140
  • feat(parser+ode): Form C readout sensitivities ∂y/∂η_k (Tier 4a milestone 4) by @roninsightrx in #142
  • feat(parser+ode): augmented ODE sensitivity RHS (Tier 4a milestone 3) by @roninsightrx in #141

New Contributors

Full Changelog: https://github.com/FeRx-NLME/ferx-core/commits/v0.1.0