Skip to content

v2: Remove parameter scale #408

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions petab/v2/C.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,6 @@
PARAMETER_ID = "parameterId"
#: Parameter name column in the parameter table
PARAMETER_NAME = "parameterName"
#: Parameter scale column in the parameter table
PARAMETER_SCALE = "parameterScale"
#: Lower bound column in the parameter table
LOWER_BOUND = "lowerBound"
#: Upper bound column in the parameter table
Expand All @@ -87,7 +85,6 @@
#: Mandatory columns of parameter table
PARAMETER_DF_REQUIRED_COLS = [
PARAMETER_ID,
PARAMETER_SCALE,
LOWER_BOUND,
UPPER_BOUND,
ESTIMATE,
Expand Down
126 changes: 3 additions & 123 deletions petab/v2/problem.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@

from ..v1 import (
parameter_mapping,
parameters,
validate_yaml_syntax,
yaml,
)
Expand Down Expand Up @@ -522,15 +521,6 @@ def get_optimization_parameters(self) -> list[str]:
"""
return [p.id for p in self.parameters if p.estimate]

def get_optimization_parameter_scales(self) -> dict[str, str]:
"""
Return list of optimization parameter scaling strings.

See :py:func:`petab.parameters.get_optimization_parameters`.
"""
# TODO: to be removed in v2?
return parameters.get_optimization_parameter_scaling(self.parameter_df)

def get_observable_ids(self) -> list[str]:
"""
Returns dictionary of observable ids.
Expand Down Expand Up @@ -595,9 +585,7 @@ def x_fixed_ids(self) -> list[str]:
"""Parameter table parameter IDs, for fixed parameters."""
return self.get_x_ids(free=False)

def get_x_nominal(
self, free: bool = True, fixed: bool = True, scaled: bool = False
) -> list:
def get_x_nominal(self, free: bool = True, fixed: bool = True) -> list:
"""Generic function to get parameter nominal values.

Parameters
Expand All @@ -607,9 +595,6 @@ def get_x_nominal(
fixed:
Whether to return fixed parameters, i.e. parameters not to
estimate.
scaled:
Whether to scale the values according to the parameter scale,
or return them on linear scale.

Returns
-------
Expand All @@ -620,10 +605,6 @@ def get_x_nominal(
for p in self.parameters
]

if scaled:
v = list(
parameters.map_scale(v, self.parameter_df[PARAMETER_SCALE])
)
return self._apply_mask(v, free=free, fixed=fixed)

@property
Expand All @@ -641,28 +622,7 @@ def x_nominal_fixed(self) -> list:
"""Parameter table nominal values, for fixed parameters."""
return self.get_x_nominal(free=False)

@property
def x_nominal_scaled(self) -> list:
"""Parameter table nominal values with applied parameter scaling"""
return self.get_x_nominal(scaled=True)

@property
def x_nominal_free_scaled(self) -> list:
"""Parameter table nominal values with applied parameter scaling,
for free parameters.
"""
return self.get_x_nominal(fixed=False, scaled=True)

@property
def x_nominal_fixed_scaled(self) -> list:
"""Parameter table nominal values with applied parameter scaling,
for fixed parameters.
"""
return self.get_x_nominal(free=False, scaled=True)

def get_lb(
self, free: bool = True, fixed: bool = True, scaled: bool = False
):
def get_lb(self, free: bool = True, fixed: bool = True):
"""Generic function to get lower parameter bounds.

Parameters
Expand All @@ -672,34 +632,20 @@ def get_lb(
fixed:
Whether to return fixed parameters, i.e. parameters not to
estimate.
scaled:
Whether to scale the values according to the parameter scale,
or return them on linear scale.

Returns
-------
The lower parameter bounds.
"""
v = [p.lb if p.lb is not None else nan for p in self.parameters]
if scaled:
v = list(
parameters.map_scale(v, self.parameter_df[PARAMETER_SCALE])
)
return self._apply_mask(v, free=free, fixed=fixed)

@property
def lb(self) -> list:
"""Parameter table lower bounds."""
return self.get_lb()

@property
def lb_scaled(self) -> list:
"""Parameter table lower bounds with applied parameter scaling"""
return self.get_lb(scaled=True)

def get_ub(
self, free: bool = True, fixed: bool = True, scaled: bool = False
):
def get_ub(self, free: bool = True, fixed: bool = True):
"""Generic function to get upper parameter bounds.

Parameters
Expand All @@ -709,31 +655,19 @@ def get_ub(
fixed:
Whether to return fixed parameters, i.e. parameters not to
estimate.
scaled:
Whether to scale the values according to the parameter scale,
or return them on linear scale.

Returns
-------
The upper parameter bounds.
"""
v = [p.ub if p.ub is not None else nan for p in self.parameters]
if scaled:
v = list(
parameters.map_scale(v, self.parameter_df[PARAMETER_SCALE])
)
return self._apply_mask(v, free=free, fixed=fixed)

@property
def ub(self) -> list:
"""Parameter table upper bounds"""
return self.get_ub()

@property
def ub_scaled(self) -> list:
"""Parameter table upper bounds with applied parameter scaling"""
return self.get_ub(scaled=True)

@property
def x_free_indices(self) -> list[int]:
"""Parameter table estimated parameter indices."""
Expand Down Expand Up @@ -790,56 +724,6 @@ def sample_parameter_startpoints_dict(
)
]

# TODO: remove in v2?
def unscale_parameters(
self,
x_dict: dict[str, float],
) -> dict[str, float]:
"""Unscale parameter values.

Parameters
----------
x_dict:
Keys are parameter IDs in the PEtab problem, values are scaled
parameter values.

Returns
-------
The unscaled parameter values.
"""
return {
parameter_id: parameters.unscale(
parameter_value,
self.parameter_df[PARAMETER_SCALE][parameter_id],
)
for parameter_id, parameter_value in x_dict.items()
}

# TODO: remove in v2?
def scale_parameters(
self,
x_dict: dict[str, float],
) -> dict[str, float]:
"""Scale parameter values.

Parameters
----------
x_dict:
Keys are parameter IDs in the PEtab problem, values are unscaled
parameter values.

Returns
-------
The scaled parameter values.
"""
return {
parameter_id: parameters.scale(
parameter_value,
self.parameter_df[PARAMETER_SCALE][parameter_id],
)
for parameter_id, parameter_value in x_dict.items()
}

@property
def n_estimated(self) -> int:
"""The number of estimated parameters."""
Expand Down Expand Up @@ -986,7 +870,6 @@ def add_parameter(
id_: str,
estimate: bool | str = True,
nominal_value: Number | None = None,
scale: str = None,
lb: Number = None,
ub: Number = None,
prior_dist: str = None,
Expand All @@ -1002,7 +885,6 @@ def add_parameter(
id_: The parameter id
estimate: Whether the parameter is estimated
nominal_value: The nominal value of the parameter
scale: The parameter scale
lb: The lower bound of the parameter
ub: The upper bound of the parameter
prior_dist: The type of the prior distribution
Expand All @@ -1016,8 +898,6 @@ def add_parameter(
record[ESTIMATE] = estimate
if nominal_value is not None:
record[NOMINAL_VALUE] = nominal_value
if scale is not None:
record[PARAMETER_SCALE] = scale
if lb is not None:
record[LOWER_BOUND] = lb
if ub is not None:
Expand Down
Loading