1pub mod data;
2pub mod error;
3#[cfg(feature = "exa")]
4pub mod exa;
5pub mod optimize;
6pub mod simulator;
7
8pub use crate::data::builder::SubjectBuilderExt;
10pub use crate::data::Interpolation::*;
11pub use crate::data::*;
12pub use crate::equation::*;
13pub use crate::optimize::effect::get_e2;
14pub use crate::optimize::spp::SppOptimizer;
15pub use crate::simulator::equation::{self, ODE};
16pub use error::PharmsolError;
17#[cfg(feature = "exa")]
18pub use exa::*;
19pub use nalgebra::dmatrix;
20pub use std::collections::HashMap;
21
22pub mod prelude {
23 pub mod data {
24 pub use crate::data::{
25 error_model::ErrorModels, parser::read_pmetrics, Covariates, Data, Event, Occasion,
26 Subject,
27 };
28 }
29 pub mod simulator {
30 pub use crate::simulator::{
31 equation,
32 equation::Equation,
33 likelihood::{psi, PopulationPredictions, Prediction, SubjectPredictions},
34 };
35 }
36 pub mod models {
37 pub use crate::simulator::equation::analytical::one_compartment;
38 pub use crate::simulator::equation::analytical::one_compartment_with_absorption;
39 pub use crate::simulator::equation::analytical::three_compartments;
40 pub use crate::simulator::equation::analytical::three_compartments_with_absorption;
41 pub use crate::simulator::equation::analytical::two_compartments;
42 pub use crate::simulator::equation::analytical::two_compartments_with_absorption;
43 }
44
45 pub use crate::data::builder::SubjectBuilderExt;
47 pub use crate::data::Interpolation::*;
48 pub use crate::data::*;
49
50 #[macro_export]
51 macro_rules! fetch_params {
52 ($p:expr, $($name:ident),*) => {
53 let p = $p;
54 let mut idx = 0;
55 $(
56 #[allow(unused_mut)]
57 let mut $name = p[idx];
58 idx += 1;
59 )*
60 let _ = idx; };
62 }
63 #[macro_export]
64 macro_rules! fetch_cov {
65 ($cov:expr, $t:expr, $($name:ident),*) => {
66 $(
67 let $name = match $cov.get_covariate(stringify!($name)) {
68 Some(cov) => cov.interpolate($t).unwrap(),
69 None => panic!("Covariate {} not found", stringify!($name)),
70 };
71
72 )*
73 };
74 }
75 #[macro_export]
76 macro_rules! lag {
77 ($($k:expr => $v:expr),* $(,)?) => {{
78 core::convert::From::from([$(($k, $v),)*])
79 }};
80 }
81
82 #[macro_export]
83 macro_rules! fa {
84 ($($k:expr => $v:expr),* $(,)?) => {{
85 core::convert::From::from([$(($k, $v),)*])
86 }};
87 }
88}
89
90#[cfg(test)]
91mod tests {
92 use super::*;
93
94 #[test]
95 fn test_fetch_params_macro() {
96 let params = vec![1.0, 2.5, 3.7];
98
99 fetch_params!(params, ka, ke, v);
100
101 assert_eq!(ka, 1.0);
102 assert_eq!(ke, 2.5);
103 assert_eq!(v, 3.7);
104 }
105}