Releases: nlmixr2/rxode2
Release list
v5.1.2
rxode2 5.1.2
-
geom_cens()/stat_cens()no longer emit "Ignoring unknown
aesthetics" warnings when censoring aesthetics are mapped.
Documentation corrected to describe the two supported lowercase
forms:lower/upper(both required) orcens(with optional
limit). The two forms cannot be mixed,lowerandupperare
now required together, andlimitwithoutcensis rejected
rather than silently ignored. -
Checks for
is.loaded()before loading a rxode2 model. This helps fix
the m1 ODR issue shown in nlmixr2est. -
Moved
dim.rxEt()here instead of in nlmixr2est
v5.1.1
rxode2 5.1.1
-
Various low level fixes to allow
nlmixr2estto have parallelized
focei. -
Parallelized the
rxode2data.frame creation. -
Use ALTREP for
id,sim.id, repeated simulation event columns
(evid,cmt,ss,amt,rate,dur,ii,time),
covariates and kept variables when blocks are identical across
simulations; falls back to filled out columns when runtime event
mutation is detected (evid_()push growth / per-individual event
reallocation). Also factors cannot currently be represented by
altrep, so they are forced to be fully represented. -
Change compile flags and compiler directives for rxode2 models to
speed up how they run. -
Have a pre-allocated context pool for lsoda in both liblsoda and
lsoda (faster because memory doesn't need to allocated and
deallocated so often) -
Change OMP scheduling to dynamic to try to help load-balance the ode
solving per subject. -
Simulation normal random numbers before integrating them into your
solve. -
Add
evid_()function to allow arbitrary doses and observations in
a rxode2 model. -
Add
splitBolus()function to split or relocate doses in the final
output. This is done at translation time (but is respected by
evid_()) so in general is a bit faster then arbitrary doses in an
estimation step fornlmixr2 -
Add
%%operator to valid rxode2 syntax -
Create per-individual ODE solving tolerances for use in focei.
-
Fix potential security and memory-management issues that could lead
to crashes or undefined behavior including integer overflow -
Change
dop853to allow per state tolerances and parallel solving
likeliblsoda. -
Change
dop853to be able to usedense=TRUEfor the 8th order
dense polynomial interpolation between dosing events. -
Now
dop853can be parallelized per thread. -
Change mtime state-based dosing to use less memory.
-
Add
plogis()translation insiderxode2to it's c-basedexpit()
functions -
Refactored
et()to be mostly in R, fixing many issues (#722 , #725, #858,
#732, #723, #721, and #724) and allowing dosing/sampling windows to
useii,addlanduntil(realized immediately) -
Add
linToOde()convertlinCmt()models to ODEs. -
Fix IOV simulation issue observed in #982.
-
More easily identify initial conditions (#948)
-
Fix sensitivities in the
linCmt()that did not match the ODE (#1018, #1012) -
Added in-solve addition of observations (
obs()), bolus doses
bolus(), infusion dosesinfuse()orinfuseDur(), system resets
reset(), compartment replacementreplace(), multiplicaton events
multiply(), and phantom/transit compartment eventsphantom().
For more granular control you can also useevid_(). -
Refactor string comparison in
rxode2so that it is actually doing
an integer comparison when running the ODE solving routine
(simulation and estimation) instead of using a string comparison.
It makes using strings like (sex == "male") run faster. -
Add
rxMemoryEstimate()andrxMemSummary()to estimate the amount
of memory that is required for a rxode2 solve. -
Add
tolFactor, a per individual change of the tolerances to be
used in solving. This is used have individualized tolerances from
nlmixr2est. -
Add
serializeFileas an option to save the rxode2 C fitting data and
then restore as needed.
What's Changed
- Preserve first error's diagnostic code in op->naTime during parallel solve by @Copilot in #994
- Fix stale documentation in dop853.h after thread-safe refactoring by @Copilot in #995
- Fix integer overflow in nSize causing segfault with large subject counts by @billdenney in #999
- Review by @mattfidler in #1000
- Add C code integration vignette by @mattfidler in #1001
- Use unsigned integer types for non-negative counts (nsub, nsim, nall, nSize) by @billdenney in #1002
- Make rxode2 more thread safe by @billdenney in #992
- Update news by @mattfidler in #1005
- Add some information about the rxUi object by @mattfidler in #586
- Allow individual allocation by @mattfidler in #1007
- Refactor atolRtolFactor_() for thread-safe per-individual sticky tolerances + C-API exposure by @Copilot in #1006
- Par dop853 by @mattfidler in #1009
- Push evid feature by @mattfidler in #1008
- 1012 ode lincmt by @mattfidler in #1018
- 948 identifying non zero initial conditions and setting those to zero by @mattfidler in #1021
- Add mod operator by @mattfidler in #1024
- Add stick vars test by @mattfidler in #1023
- docs: add article on sticky variables by @mattfidler in #1025
- Allow split bolus doses by @mattfidler in #1026
- Add plogis() support inside of a rxode2 model function by @mattfidler in #1027
- Fix and test for issue #982 by @mattfidler in #1028
- Refactor et by @mattfidler in #1015
- 1016 lin cmt by @mattfidler in #1030
- 1035 global struct by @mattfidler in #1036
- Range-check dparse input length to prevent (int)strlen truncation by @billdenney in #1031
- Range-check rc_dup_str length to prevent silent int truncation by @billdenney in #1032
- Per-individual neqOverride C-API + plumb through getSolve/getAdvan by @billdenney in #1038
- Fix OOB read in etTran event loop when id column contains NA by @billdenney in #1037
- Fix/mem sbuf int overflow by @billdenney in #1034
- Use size_t for getLine column accumulator to prevent int overflow by @billdenney in #1033
- Plumb neqOverride through par_solve / iniSubject / indLin by @billdenney in #1040
- Guard convertDvid_ against empty input to prevent OOB read by @billdenney in #1039
- Bolus by @mattfidler in #1041
- Str cmp model variable by @mattfidler in #1043
- Parallel fixes by @mattfidler in #1044
- Memory allocate by @mattfidler in #1045
- Dry sort by @mattfidler in #1046
- Fix dup fn by @mattfidler in #1047
- Add some pool optimization and compiler flag opts by @mattfidler in #1049
- Serialize by @mattfidler in #1048
- Add dense polynomial output for DOP853 (iout=2) by @mattfidler in #1050
- More altrep by @mattfidler in #1051
Full Changelog: v5.0.2...v5.1.1
v5.0.2
rxode2 5.0.2
-
Allow state-dependent
dur(),rate(),alag(),mtime()now
allow states to modify their behavior. The state value at the time
of the event is used to calculate any changes. -
Fix: all six ODE solve loops now use precomputed
timeThreadvalues for
event times instead of recomputing viagetTime_()withypNA, preventing
NA propagation for any state-dependent lag scenario. -
Export the internal
.rxGetSeed()and.rxSetSeed()for use in the
nlmixr2savepackage. -
Bug fix for
.copyUi()with the new format (5.0+) of rxode2 ui models -
With new versions of R,
getOption()is no longer a bottleneck, so
syncing to local variables is no longer done internally -
Allow transforms to return
NA. -
Drop
magrittrand use|>instead of%>%in the examples
(requires R 4.1) -
Change default model serialization to
bzip2and move binary code
generation inside of C. -
Fix where getting seed saves/modifies the RNG scope, as well as a bug fix
for restoring the random seed state
What's Changed
- Fix .rxTransform() by @mattfidler in #971
- Change to R's pipe operator by @mattfidler in #973
- Add qs work-around (when it is installed) by @mattfidler in #974
- Codegen of raw binary in C by @mattfidler in #975
- Use %fin% from fastmatch by @mattfidler in #979
- Don't use syncing anymore by @mattfidler in #981
- Fix infinite recursion in
.copyEnv()on circular environment references by @Copilot in #987 - Fix copy ui by @mattfidler in #986
- Use (Rf_error) by @mattfidler in #990
- Time dependent dur rate f and mtime by @mattfidler in #991
Full Changelog: v5.0.1...v5.0.2
v5.0.1
-
Change random number generation to always return doubles internally as well as no longer take a rxode2 individual structure, this is inferred by the thread number.
-
Change string representation of model variables to internal binary C code (to avoid macOS M1 sanitizer issues with strings).
-
Allow user to change the internal serialization type with options("rxode2.serialize.type"); Currently can be one of “qs2”, “qdata”, “base”, “bzip2” and “xz”. This option must be set before rxode2 is loaded, once loaded it keeps the option initially set. This is set to xz which is from base R, but could be sped up with either "qs2" (more future proof) or "qdata" (a bit faster).
-
Removed lsoda CDIR$ IVDEP directive, as requested by CRAN.
What's Changed
- Fix CRAN issues by @mattfidler in #963
- Use (void*) references for rxbinom() and other random number gen by @mattfidler in #964
- Change random number generators to not include the rxode2 individual patient structure. by @mattfidler in #967
- Add/Use bzip2 by @mattfidler in #968
- Use xz as default serialization/compression by @mattfidler in #969
Full Changelog: v5.0.0...v5.0.1
v5.0.0
rxode2 5.0.0
-
Better error for
tad(depot)whenlinCmt()doesn't include a
depot compartment. -
Remove
qsdependency; For rxode2 ui objects, use lists instead of
serialized objects. The internal C++ code still generatesqs2
sterilization objects (#950) -
Fixed translation for censoring/limit to account for a possible
CMTvariable before theCENS/LIMITcolumn (#951, #952) -
Added
dmexpit()for getting the diagonal Jacobian. -
Added special handling of
mixestandmixunif.
What's Changed
- CRAN release by @mattfidler in #941
- Add special handling of mixest and mixunif by @mattfidler in #944
- add dmexpit() by @mattfidler in #946
- Fix grammar in error messages: "in not in" → "is not in" by @Copilot in #953
- Checks for censoring based on name by @mattfidler in #952
- Use qs2 instead of qs by @mattfidler in #957
New Contributors
- @Copilot made their first contribution in #953
Full Changelog: v4.1.1...v5.0.0
v4.1.1
rxode2 4.1.1
-
Stacking for multiple-endpoint
ipredSimnow matches
multiple-endpointsim; Issue #929 -
Fix occasional
$propsthat threw an error with empty properties
(when using properties liketad0()); Issue #924 -
Allow mixture models
mix()to be loaded withrxS()as a step to
support mixtures in nlmixr2's focei; Issue #933. -
Identify the correct transformation type for
iovvariables (#936) -
Fix multiple compartment simulation edge cases where simulations
were not being performed (#939) -
When referencing
cmtin models, the variable is forced to beCMT
(related to #939)
v4.1.0
-
Change rxui
$evaluation when completing in rstudio, fixes strange calculations popping up inrstudio(#909) -
Add orphan
rxode2model unloading when usingrxUnloadAll(), and change the return type to always be a boolean. -
Add
assertRxUiIovNoCorto assert IOVs have no correlations in them. -
Handle the levels for inter-occasion variability in the ui better (#614)
-
Create a new function
mix()that will allow mixture models to be simulated in preparation of mixture support innlmixr2. This allows mixture models to be specified as:v = mix(v1, p1, v2, p2, v3)where the probability of havingv=v1is modeled byp1,v=v2is modeled byp2, andv=v3is modeled by probability1-p1-p2. -
Created new functions
mlogit()andmexpit()to convert probabilities used in mixture models to log-scaled values.mlogit()converts the probabilities to log-scaled values (using root-finding) andmexpit()converts the log values into probabilities. The equation for the conversion of log to probabilities is$p_i = \frac{exp(x_i)}{1+\sum_{j=1}^{N-1}exp(x_j)}$ -
Added new assertion
assertRxUiNoMixwhich throws an error when a mixture model is present (iemix()) -
Fix for label processing when calling
rxode2(uiModel)
What's Changed
- 909 rstudio 2025 by @mattfidler in #910
- Try unloading orphan rxode2 dlls by @mattfidler in #911
- Add assertion for new nlmixr2est by @mattfidler in #913
- iov bad cov by @mattfidler in #915
- Fix and test for #919 by @mattfidler in #920
- 918 mix by @mattfidler in #921
- 922 probit probit inv by @mattfidler in #923
Full Changelog: v4.0.3...v4.1.0
v4.0.3
rxode2 4.0.3
- For CRAN's m1 ASAN checks of nlmixr2est, loading and unloading the
same dll or by deleting the dll and recreating the exact same code,
and then loading the dll will cause the ASAN check to flag an odr
violation. Because of this, a mechanism to not unload dlls has been
added. This allows the next version ofnlmixr2estto not have
issues with Mac m1 san checks.
v4.0.2
rxode2 4.0.2
-
At the request of CRAN, be a bit more careful so that names are not
duplicated. Now include the md5 hash, a global counter and random 4
digit and number combination. In addition add the name of the
original function so it will be easier to debug in the future. -
Fall back to data.frame
rbindwhenrbind.rxSolve()fails
What's Changed
- New ODR, as indirectly request by CRAN. by @mattfidler in #904
Full Changelog: v4.0.1...v4.0.2
v4.0.1
rxode2 4.0.1
-
Add the ability to use
rbindfor solvedrxode2frames. -
Fix
LTOissue for_rxode2_calcDerived
What's Changed
- Remove more tests for CRAN by @mattfidler in #898
- fix typo by @leovuong in #900
- Another rbind instance by @mattfidler in #899
- Cran update by @mattfidler in #902
Full Changelog: v4.0.0...v4.0.1