pub mod data;
pub mod error;
#[cfg(feature = "exa")]
pub mod exa;
pub mod optimize;
pub mod simulator;
pub use crate::data::builder::SubjectBuilderExt;
pub use crate::data::Interpolation::*;
pub use crate::data::*;
pub use crate::equation::*;
pub use crate::optimize::effect::get_e2;
pub use crate::optimize::spp::SppOptimizer;
pub use crate::simulator::equation::{
self,
ode::{ExplicitRkTableau, OdeSolver, SdirkTableau},
ODE,
};
pub use error::PharmsolError;
#[cfg(feature = "exa")]
pub use exa::*;
pub use nalgebra::dmatrix;
pub use pharmsol_macros::ode;
pub use std::collections::HashMap;
pub mod prelude {
pub use crate::error::PharmsolError;
pub mod data {
pub use crate::data::{
error_model::{AssayErrorModel, AssayErrorModels},
parser::{read_pmetrics, DataRow, DataRowBuilder},
residual_error::{ResidualErrorModel, ResidualErrorModels},
Covariates, Data, Event, Occasion, Subject,
};
}
pub use crate::data::{
builder::SubjectBuilderExt,
error_model::{AssayErrorModel, AssayErrorModels, ErrorPoly},
Covariates, Data, Event, Interpolation, Occasion, Subject,
};
#[allow(deprecated)]
pub mod simulator {
pub use crate::simulator::{
cache::{self, CacheSettings},
equation,
equation::Equation,
likelihood::{
log_likelihood_batch, log_likelihood_matrix, log_likelihood_subject, log_psi, psi,
PopulationPredictions, Prediction, SubjectPredictions,
},
};
}
pub use crate::simulator::{
cache::{configure_cache, disable_cache, enable_cache, reset_caches, CacheSettings},
equation::{
self,
ode::{ExplicitRkTableau, OdeSolver, SdirkTableau},
Equation,
},
likelihood::{Prediction, SubjectPredictions},
};
pub use crate::simulator::equation::analytical::{
one_compartment, one_compartment_cl, one_compartment_cl_with_absorption,
one_compartment_with_absorption, three_compartments, three_compartments_with_absorption,
two_compartments, two_compartments_cl, two_compartments_cl_with_absorption,
two_compartments_with_absorption,
};
pub mod models {
pub use crate::simulator::equation::analytical::{
one_compartment, one_compartment_cl, one_compartment_cl_with_absorption,
one_compartment_with_absorption, three_compartments,
three_compartments_with_absorption, two_compartments, two_compartments_cl,
two_compartments_cl_with_absorption, two_compartments_with_absorption,
};
}
#[doc(inline)]
pub use crate::fa;
#[doc(inline)]
pub use crate::fetch_cov;
#[doc(inline)]
pub use crate::fetch_params;
#[doc(inline)]
pub use crate::lag;
#[doc(inline)]
pub use crate::ode;
}
#[macro_export]
macro_rules! fetch_params {
($p:expr, $($name:ident),*) => {
let p = $p;
let mut idx = 0;
$(
#[allow(unused_mut)]
let mut $name = p[idx];
idx += 1;
)*
let _ = idx; };
}
#[macro_export]
macro_rules! fetch_cov {
($cov:expr, $t:expr, $($name:ident),*) => {
$(
let $name = match $cov.get_covariate(stringify!($name)) {
Some(cov) => cov.interpolate($t).unwrap(),
None => panic!("Covariate {} not found", stringify!($name)),
};
)*
};
}
#[macro_export]
macro_rules! lag {
($($k:expr => $v:expr),* $(,)?) => {{
core::convert::From::from([$(($k, $v),)*])
}};
}
#[macro_export]
macro_rules! fa {
($($k:expr => $v:expr),* $(,)?) => {{
core::convert::From::from([$(($k, $v),)*])
}};
}
#[cfg(test)]
mod tests {
#[test]
fn test_fetch_params_macro() {
let params = vec![1.0, 2.5, 3.7];
fetch_params!(params, ka, ke, v);
assert_eq!(ka, 1.0);
assert_eq!(ke, 2.5);
assert_eq!(v, 3.7);
}
}