Skip to content

Commit

Permalink
Rename & fix notebooks
Browse files Browse the repository at this point in the history
  • Loading branch information
Doresic committed Dec 14, 2023
1 parent a2c7b1f commit f6c2323
Show file tree
Hide file tree
Showing 12 changed files with 175 additions and 2,104 deletions.
25 changes: 17 additions & 8 deletions doc/example/censored_data.ipynb

Large diffs are not rendered by default.

541 changes: 41 additions & 500 deletions doc/example/ordinal_data.ipynb

Large diffs are not rendered by default.

596 changes: 28 additions & 568 deletions doc/example/relative_data.ipynb

Large diffs are not rendered by default.

999 changes: 35 additions & 964 deletions doc/example/semiquantitative_data.ipynb

Large diffs are not rendered by default.

16 changes: 7 additions & 9 deletions pypesto/hierarchical/inner_calculator_collector.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,9 @@

from .ordinal import OrdinalCalculator, OrdinalInnerSolver, OrdinalProblem
from .semiquantitative import (
SemiquantitativeCalculator,
SemiquantitativeInnerProblem,
SemiquantitativeInnerSolver,
SemiquantCalculator,
SemiquantInnerSolver,
SemiquantProblem,
)

AmiciModel = Union['amici.Model', 'amici.ModelPtr']
Expand Down Expand Up @@ -146,15 +146,13 @@ def construct_inner_calculators(
if key in SPLINE_APPROXIMATION_OPTIONS
}
spline_ratio = spline_inner_options.pop(SPLINE_RATIO, None)
spline_inner_problem = (
SemiquantitativeInnerProblem.from_petab_amici(
petab_problem, model, edatas, spline_ratio
)
spline_inner_problem = SemiquantProblem.from_petab_amici(
petab_problem, model, edatas, spline_ratio
)
spline_inner_solver = SemiquantitativeInnerSolver(
spline_inner_solver = SemiquantInnerSolver(
options=spline_inner_options
)
spline_calculator = SemiquantitativeCalculator(
spline_calculator = SemiquantCalculator(
spline_inner_problem, spline_inner_solver
)
self.noise_dummy_values = (
Expand Down
8 changes: 4 additions & 4 deletions pypesto/hierarchical/semiquantitative/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
hierarchical optimization problem.
"""

from .calculator import SemiquantitativeCalculator
from .parameter import SemiquantitativeInnerParameter
from .problem import SemiquantitativeInnerProblem
from .solver import SemiquantitativeInnerSolver
from .calculator import SemiquantCalculator
from .parameter import SplineInnerParameter
from .problem import SemiquantProblem
from .solver import SemiquantInnerSolver
12 changes: 6 additions & 6 deletions pypesto/hierarchical/semiquantitative/calculator.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@
filter_return_dict,
init_return_values,
)
from .problem import SemiquantitativeInnerProblem
from .solver import SemiquantitativeInnerSolver
from .problem import SemiquantProblem
from .solver import SemiquantInnerSolver

try:
import amici
Expand All @@ -37,7 +37,7 @@
pass


class SemiquantitativeCalculator(AmiciCalculator):
class SemiquantCalculator(AmiciCalculator):
"""A calculator is passed as `calculator` to the pypesto.AmiciObjective.
The object is called by :func:`pypesto.AmiciObjective.call_unprocessed`
Expand All @@ -46,8 +46,8 @@ class SemiquantitativeCalculator(AmiciCalculator):

def __init__(
self,
inner_problem: SemiquantitativeInnerProblem,
inner_solver: SemiquantitativeInnerSolver = None,
inner_problem: SemiquantProblem,
inner_solver: SemiquantInnerSolver = None,
):
"""Initialize the calculator from the given problem.
Expand All @@ -63,7 +63,7 @@ def __init__(
self.inner_problem = inner_problem

if inner_solver is None:
inner_solver = SemiquantitativeInnerSolver()
inner_solver = SemiquantInnerSolver()
self.inner_solver = inner_solver

def initialize(self):
Expand Down
2 changes: 1 addition & 1 deletion pypesto/hierarchical/semiquantitative/parameter.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
logger = logging.getLogger(__name__)


class SemiquantitativeInnerParameter(InnerParameter):
class SplineInnerParameter(InnerParameter):
"""A spline (inner) parameter of the spline hierarchical optimization problem.
Attributes
Expand Down
34 changes: 14 additions & 20 deletions pypesto/hierarchical/semiquantitative/problem.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
ix_matrices_from_arrays,
scale_value,
)
from .parameter import SemiquantitativeInnerParameter
from .parameter import SplineInnerParameter

try:
import amici
Expand All @@ -45,7 +45,7 @@
pass


class SemiquantitativeInnerProblem(AmiciInnerProblem):
class SemiquantProblem(AmiciInnerProblem):
"""Inner optimization problem for semi-quantitative data.
The inner problem for semi-quantitative data consists of spline parameters
Expand Down Expand Up @@ -129,7 +129,7 @@ def from_petab_amici(
amici_model: 'amici.Model',
edatas: List['amici.ExpData'],
spline_ratio: float = None,
) -> 'SemiquantitativeInnerProblem':
) -> 'SemiquantProblem':
"""Construct the inner problem from the `petab_problem`."""
if spline_ratio is None:
spline_ratio = get_default_options()
Expand All @@ -142,9 +142,7 @@ def get_groups_for_xs(self, inner_parameter_type: str) -> List[int]:
groups = [x.group for x in self.get_xs_for_type(inner_parameter_type)]
return list(set(groups))

def get_xs_for_group(
self, group: int
) -> List[SemiquantitativeInnerParameter]:
def get_xs_for_group(self, group: int) -> List[SplineInnerParameter]:
r"""Get ``SplineParameter``\s that belong to the given group."""
return [
x
Expand All @@ -153,9 +151,7 @@ def get_xs_for_group(
and x.inner_parameter_type == InnerParameterType.SPLINE
]

def get_free_xs_for_group(
self, group: int
) -> List[SemiquantitativeInnerParameter]:
def get_free_xs_for_group(self, group: int) -> List[SplineInnerParameter]:
r"""Get ``SplineParameter``\s that are free and belong to the given group."""
return [
x
Expand All @@ -165,9 +161,7 @@ def get_free_xs_for_group(
and x.inner_parameter_type == InnerParameterType.SPLINE
]

def get_fixed_xs_for_group(
self, group: int
) -> List[SemiquantitativeInnerParameter]:
def get_fixed_xs_for_group(self, group: int) -> List[SplineInnerParameter]:
r"""Get ``SplineParameter``\s that are fixed and belong to the given group."""
return [
x
Expand All @@ -179,7 +173,7 @@ def get_fixed_xs_for_group(

def get_noise_parameters_for_group(
self, group: int
) -> SemiquantitativeInnerParameter:
) -> SplineInnerParameter:
r"""Get the ``SplineParameter``\ that is a noise parameters and belongs to the given group."""
return [
x
Expand Down Expand Up @@ -267,7 +261,7 @@ def spline_inner_problem_from_petab_problem(
for par in inner_parameters:
par.ixs = ix_matrices[par.inner_parameter_id]

return SemiquantitativeInnerProblem(
return SemiquantProblem(
xs=inner_parameters,
data=data,
edatas=edatas,
Expand All @@ -279,7 +273,7 @@ def spline_inner_parameters_from_measurement_df(
df: pd.DataFrame,
spline_ratio: float,
amici_model: 'amici.Model',
) -> List[SemiquantitativeInnerParameter]:
) -> List[SplineInnerParameter]:
"""Create list of inner free spline parameters from PEtab measurement table."""
df = df.reset_index()

Expand All @@ -305,7 +299,7 @@ def spline_inner_parameters_from_measurement_df(
for par_index in range(n_spline_parameters):
par_id = f'{par_type}_{observable_id}_{group}_{par_index+1}'
inner_parameters.append(
SemiquantitativeInnerParameter(
SplineInnerParameter(
inner_parameter_id=par_id,
inner_parameter_type=InnerParameterType.SPLINE,
scale=LIN,
Expand All @@ -326,7 +320,7 @@ def spline_inner_parameters_from_measurement_df(
def noise_inner_parameters_from_parameter_df(
petab_problem: 'petab.Problem',
amici_model: 'amici.Model',
) -> List[SemiquantitativeInnerParameter]:
) -> List[SplineInnerParameter]:
"""Create list of inner free noise parameters from PEtab parameter table."""
# Select the nonlinear monotone measurements.
measurement_df = petab_problem.measurement_df
Expand Down Expand Up @@ -357,7 +351,7 @@ def noise_inner_parameters_from_parameter_df(
group = observable_ids.index(observable_id) + 1

noise_parameters.append(
SemiquantitativeInnerParameter(
SplineInnerParameter(
inner_parameter_id=row[PARAMETER_ID],
inner_parameter_type=InnerParameterType.SIGMA,
scale=LIN,
Expand All @@ -376,7 +370,7 @@ def noise_inner_parameters_from_parameter_df(
def spline_ixs_for_measurement_specific_parameters(
petab_problem: 'petab.Problem',
amici_model: 'amici.Model',
inner_parameters: List[SemiquantitativeInnerParameter],
inner_parameters: List[SplineInnerParameter],
) -> Dict[str, List[Tuple[int, int, int]]]:
"""Create mapping of parameters to measurements.
Expand Down Expand Up @@ -448,7 +442,7 @@ def spline_ixs_for_measurement_specific_parameters(

def get_spline_inner_par_ids_for_measurement(
measurement: Dict,
inner_parameters: List[SemiquantitativeInnerParameter],
inner_parameters: List[SplineInnerParameter],
):
"""Return inner parameter ids of parameters which are related to the measurement."""
return [
Expand Down
16 changes: 8 additions & 8 deletions pypesto/hierarchical/semiquantitative/solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,16 @@
InnerParameterType,
)
from ..base_solver import InnerSolver
from .parameter import SemiquantitativeInnerParameter
from .problem import SemiquantitativeInnerProblem
from .parameter import SplineInnerParameter
from .problem import SemiquantProblem

try:
from amici.parameter_mapping import ParameterMapping
except ImportError:
pass


class SemiquantitativeInnerSolver(InnerSolver):
class SemiquantInnerSolver(InnerSolver):
"""Solver of the inner subproblem of spline approximation for nonlinear-monotone data.
Options
Expand Down Expand Up @@ -76,7 +76,7 @@ def validate_options(self):

def solve(
self,
problem: SemiquantitativeInnerProblem,
problem: SemiquantProblem,
sim: List[np.ndarray],
amici_sigma: List[np.ndarray],
) -> list:
Expand Down Expand Up @@ -155,7 +155,7 @@ def calculate_obj_function(x_inner_opt: list):

def calculate_gradients(
self,
problem: SemiquantitativeInnerProblem,
problem: SemiquantProblem,
x_inner_opt: List[Dict],
sim: List[np.ndarray],
amici_sigma: List[np.ndarray],
Expand Down Expand Up @@ -363,7 +363,7 @@ def get_default_options() -> Dict:

def _optimize_spline(
self,
inner_parameters: List[SemiquantitativeInnerParameter],
inner_parameters: List[SplineInnerParameter],
group_dict: Dict,
):
"""Run optimization for the inner problem.
Expand Down Expand Up @@ -524,7 +524,7 @@ def _get_minimal_difference(

def _get_inner_optimization_options(
self,
inner_parameters: List[SemiquantitativeInnerParameter],
inner_parameters: List[SplineInnerParameter],
N: int,
min_meas: float,
max_meas: float,
Expand Down Expand Up @@ -1059,7 +1059,7 @@ def extract_expdata_using_mask(


def save_inner_parameters_to_inner_problem(
inner_problem: SemiquantitativeInnerProblem,
inner_problem: SemiquantProblem,
s: np.ndarray,
group: int,
) -> None:
Expand Down
18 changes: 8 additions & 10 deletions pypesto/visualize/spline_approximation.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,9 @@
try:
import amici

from ..hierarchical.semiquantitative.calculator import (
SemiquantitativeCalculator,
)
from ..hierarchical.semiquantitative.calculator import SemiquantCalculator
from ..hierarchical.semiquantitative.solver import (
SemiquantitativeInnerSolver,
SemiquantInnerSolver,
_calculate_regularization_for_group,
get_spline_mapped_simulations,
)
Expand Down Expand Up @@ -107,7 +105,7 @@ def plot_splines_from_pypesto_result(
for (
calculator
) in pypesto_result.problem.objective.calculator.inner_calculators:
if isinstance(calculator, SemiquantitativeCalculator):
if isinstance(calculator, SemiquantCalculator):
spline_calculator = calculator
break

Expand Down Expand Up @@ -192,7 +190,7 @@ def plot_splines_from_inner_result(
delta_c,
spline_bases,
n,
) = SemiquantitativeInnerSolver._rescale_spline_bases(
) = SemiquantInnerSolver._rescale_spline_bases(
self=None,
sim_all=simulation,
N=len(inner_parameters),
Expand Down Expand Up @@ -357,7 +355,7 @@ def _add_spline_mapped_simulations_to_model_fit(

spline_calculator = None
for calculator in pypesto_problem.objective.calculator.inner_calculators:
if isinstance(calculator, SemiquantitativeCalculator):
if isinstance(calculator, SemiquantCalculator):
spline_calculator = calculator
break

Expand Down Expand Up @@ -392,7 +390,7 @@ def _add_spline_mapped_simulations_to_model_fit(
delta_c,
spline_bases,
n,
) = SemiquantitativeInnerSolver._rescale_spline_bases(
) = SemiquantInnerSolver._rescale_spline_bases(
self=None,
sim_all=simulation,
N=len(inner_parameters),
Expand Down Expand Up @@ -510,7 +508,7 @@ def _obtain_regularization_for_start(
for (
calculator
) in pypesto_result.problem.objective.calculator.inner_calculators:
if isinstance(calculator, SemiquantitativeCalculator):
if isinstance(calculator, SemiquantCalculator):
spline_calculator = calculator
break

Expand All @@ -537,7 +535,7 @@ def _obtain_regularization_for_start(
delta_c,
spline_bases,
n,
) = SemiquantitativeInnerSolver._rescale_spline_bases(
) = SemiquantInnerSolver._rescale_spline_bases(
self=None,
sim_all=simulation,
N=len(inner_parameters),
Expand Down
Loading

0 comments on commit f6c2323

Please sign in to comment.