from importlib.resources import as_file, files
import numpy as np
from eulerpi.core.models import ArtificialModelInterface, SBMLModel
[docs]
class CaffeineSBMLModel(SBMLModel, ArtificialModelInterface):
CENTRAL_PARAM = np.array([1.0, 1.0])
PARAM_LIMITS = np.array([[0.0, 2.0], [0.0, 2.0]])
def __init__(
self,
central_param: np.ndarray = CENTRAL_PARAM,
param_limits: np.ndarray = PARAM_LIMITS,
**kwargs,
) -> None:
param_ids = ["A", "B"]
timepoints = np.array([0.5, 1.0])
sbml_files = files("eulerpi.examples.sbml")
sbml_file_name = "Caffeine_2Wks_Exponential_decay.xml"
with as_file(sbml_files.joinpath(sbml_file_name)) as sbml_file:
super().__init__(
sbml_file,
central_param,
param_limits,
timepoints,
param_ids,
**kwargs,
)
[docs]
def generate_artificial_params(self, num_samples: int) -> np.ndarray:
diff0 = 0.2
diff1 = 0.2
params = np.random.rand(num_samples, self.param_dim)
params[:, 0] *= diff0
params[:, 0] += 1.0 - diff0 / 2.0
params[:, 1] *= diff1
params[:, 1] += 1.0 - diff1 / 2.0
return params