-
Notifications
You must be signed in to change notification settings - Fork 47
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Moved creation of the amici objective function to a separate class, leaving the importer really independent of amici * Remove check gradients, as this can be done in an objective function * Added functions with a not implementedError and moved most of them to AmiciFactory * Moved import to a factory, allowing a single PEtabImporter to function with different models. Created a basic PetabSimulator supported (inefficent most likely but as a starter) * Resolve potential annotation problems. * Solved the problem of x_names not saving the fixd parameters. similar solution to amici Objective * rewrote petab testsuite to fit new design. * Adjusted text and example code for new changes * import error with petab simulator * updated code * import petab as optional * Adjusted roadrunner example and also solved issue in PetabImporterRR * Another import * Another import and spline error * Changed the documentation that is included * added test for petabSimulator with the example of basico * Fix text for check gradients and fix roadrunner notebook. * added test for petabSimulator with the example of basico * cleared output * Hopeflly renamed everything * Temporary fix for roadrunner fd objective * correct installation of basico as petab simulator in test * Removed try-except in simulator as it is to unspecific. Now requiring the parameter update function * not basico but copasi-basico * not copasi-basico but copasi-basico[petab] * Adjusted some description text * More accurate documentation * Replaced Usage of roadrunner, amici, petab strings with constants * Update doc/example/petab_import.ipynb Co-authored-by: Dilan Pathirana <[email protected]> * Update doc/example/petab_import.ipynb Co-authored-by: Fabian Fröhlich <[email protected]> * Renamed factory mentions as it was not a fitting name. * added option to pass simulator type and simulator to create_objective_creator --------- Co-authored-by: Dilan Pathirana <[email protected]> Co-authored-by: Fabian Fröhlich <[email protected]>
- Loading branch information
1 parent
2e57687
commit 0264a1e
Showing
29 changed files
with
1,595 additions
and
784 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
"""Objective function for PEtab models using the PEtab simulator.""" | ||
from __future__ import annotations | ||
|
||
try: | ||
import petab.v1 as petab | ||
from petab.v1.simulate import Simulator as PetabSimulator | ||
except ImportError: | ||
petab = None | ||
from collections import OrderedDict | ||
from collections.abc import Sequence | ||
|
||
import numpy as np | ||
|
||
from ..C import FVAL, MODE_FUN, MODE_RES, RES, ModeType | ||
from .base import ObjectiveBase, ResultDict | ||
|
||
|
||
class PetabSimulatorObjective(ObjectiveBase): | ||
"""Objective function for PEtab models using the PEtab simulator.""" | ||
|
||
def __init__( | ||
self, | ||
simulator: PetabSimulator, | ||
x_names: Sequence[str] | None = None, | ||
): | ||
"""Initialize the PEtab simulator objective function. | ||
Parameters | ||
---------- | ||
petab_problem: | ||
The PEtab problem. | ||
simulator: | ||
The PEtab simulator. | ||
x_names: | ||
Names of optimization parameters. | ||
""" | ||
if petab is None: | ||
raise ImportError( | ||
"The `petab` package is required for this objective function." | ||
) | ||
self.simulator = simulator | ||
self.petab_problem = self.simulator.petab_problem | ||
if x_names is None: | ||
x_names = list(self.petab_problem.get_x_ids()) | ||
super().__init__(x_names=x_names) | ||
|
||
def replace_parameters(self, x: np.ndarray): | ||
"""Replace the parameters in the PEtab problem with the given values. | ||
Parameters | ||
---------- | ||
x: | ||
Parameter vector for optimization. | ||
""" | ||
x_dict = OrderedDict(zip(self._x_names, x)) | ||
x_unscaled = self.petab_problem.unscale_parameters(x_dict) | ||
par_df = self.petab_problem.parameter_df | ||
par_df["nominalValue"] = par_df.index.map(x_unscaled) | ||
self.simulator.set_parameters(x_unscaled) | ||
|
||
def call_unprocessed( | ||
self, | ||
x: np.ndarray, | ||
sensi_orders: tuple[int, ...], | ||
mode: ModeType, | ||
return_dict: bool, | ||
**kwargs, | ||
) -> ResultDict: | ||
"""See :meth:`ObjectiveBase.call_unprocessed`.""" | ||
|
||
self.replace_parameters(x) | ||
sim_df = self.simulator.simulate(noise=False, as_measurement=False) | ||
result = {} | ||
result["simulations"] = sim_df | ||
if mode == MODE_FUN: | ||
result[FVAL] = -petab.calculate_llh( | ||
measurement_dfs=self.petab_problem.measurement_df, | ||
simulation_dfs=sim_df, | ||
observable_dfs=self.petab_problem.observable_df, | ||
parameter_dfs=self.petab_problem.parameter_df, | ||
) | ||
elif mode == MODE_RES: | ||
result[RES] = petab.calculate_residuals( | ||
measurement_dfs=self.petab_problem.measurement_df, | ||
simulation_dfs=sim_df, | ||
observable_dfs=self.petab_problem.observable_df, | ||
parameter_dfs=self.petab_problem.parameter_df, | ||
) | ||
return result | ||
|
||
def check_sensi_orders( | ||
self, | ||
sensi_orders: tuple[int, ...], | ||
mode: ModeType, | ||
) -> bool: | ||
"""See :class:`ObjectiveBase` documentation.""" | ||
if not sensi_orders: | ||
return True | ||
sensi_order = max(sensi_orders) | ||
max_sensi_order = 0 | ||
|
||
return sensi_order <= max_sensi_order |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.