#[cfg(feature = "dsl-aot")]
mod build_support;
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub mod data;
#[cfg(feature = "dsl-core")]
pub mod dsl;
pub mod error;
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub mod nca;
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub mod optimize;
mod parameter_order;
mod parameters;
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub mod simulator;
#[cfg(all(
test,
any(
feature = "dsl-jit",
all(feature = "dsl-wasm", feature = "dsl-wasm-compile")
)
))]
mod test_fixtures;
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub use crate::data::builder::SubjectBuilderExt;
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub use crate::data::Interpolation::*;
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub use crate::data::*;
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub use crate::optimize::effect::get_e2;
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub use crate::optimize::parameters::ParameterOptimizer;
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub use crate::simulator::equation::analytical::*;
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub use crate::simulator::equation::metadata;
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub use crate::simulator::equation::{
self,
ode::{ExplicitRkTableau, OdeSolver, SdirkTableau},
Analytical, AnalyticalKernel, Cache, Equation, ModelKind, ModelMetadata, ModelMetadataError,
NameDomain, Predictions, RouteInputPolicy, RouteKind, State, ValidatedModelMetadata, ODE, SDE,
};
pub use error::PharmsolError;
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub use nalgebra::dmatrix;
pub use parameters::{ParameterError, ParameterOrder, Parameters};
pub use pharmsol_macros::{analytical, ode, sde};
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub use std::collections::HashMap;
#[doc(hidden)]
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub mod __macro_support {
pub fn vector_from_values(values: Vec<f64>) -> crate::simulator::V {
nalgebra::DVector::from_vec(values).into()
}
}
#[cfg(not(all(target_arch = "wasm32", target_os = "unknown")))]
pub mod prelude {
pub use crate::Parameters;
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},
event::{AUCMethod, BLQRule, Route},
Covariates, Data, Event, Interpolation, Occasion, Subject,
};
pub use crate::nca::NCA;
pub use crate::nca::{MetricsError, ObservationMetrics};
pub use crate::nca::{NCAOptions, NCAPopulation, SubjectNCAResult};
pub use crate::data::auc::{auc, auc_interval, aumc, interpolate_linear};
#[allow(deprecated)]
pub mod simulator {
pub use crate::simulator::{
cache::{self, PredictionCache, SdeLikelihoodCache, DEFAULT_CACHE_SIZE},
equation,
equation::Equation,
likelihood::{
log_likelihood_batch, log_likelihood_matrix, log_likelihood_subject, log_psi, psi,
PopulationPredictions, Prediction, SubjectPredictions,
},
};
}
pub use crate::simulator::{
cache::{PredictionCache, SdeLikelihoodCache, DEFAULT_CACHE_SIZE},
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::analytical;
#[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;
#[doc(inline)]
pub use crate::sde;
}
#[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);
}
}