Skip to content

Commit 7bf3b76

Browse files
FFroehlichdweindl
andauthored
Harmonize Fixed parameter Names (#3027)
* refactor model components * fix argument names * Update de_model_components.py * refactor de_model * refactor cpp code * fixups cpp * fixup id confusion * fixup * doc * get_parameter_names * free parameter ids * more renaming * update templates, regenerate test models * Rename py * some more * .. * .. * Update test_pregenerated_models.py * fix pysb tests * clang-format * changelog * numpy * Apply suggestions from code review --------- Co-authored-by: Daniel Weindl <[email protected]> Co-authored-by: Daniel Weindl <[email protected]>
1 parent e75c348 commit 7bf3b76

File tree

98 files changed

+812
-781
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+812
-781
lines changed

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,20 @@ See also our [versioning policy](https://amici.readthedocs.io/en/latest/versioni
88

99
**BREAKING CHANGES**
1010

11+
* The package has been reorganized. All importers have been moved to
12+
`amici.importers` subpackages. For example, all functionality from
13+
`amici.sbml_import` is now available in `amici.importers.sbml`.
14+
* The naming of free and fixed parameters has been harmonized across the API:
15+
AMICI differentiates between parameters with respect to which a model
16+
can compute sensitivities ("free parameters") and parameters with respect to
17+
which no sensitivities can be computed ("fixed parameters").
18+
"Free" and "fixed" are to be understood in the context of parameter
19+
estimation, where free parameters are optimized,
20+
while fixed parameters remain constant.
21+
Free parameters were previously referred to as just "parameters", and
22+
fixed parameters as "fixed parameters", "constant parameters",
23+
or "constants". This has now been harmonized to "free" and "fixed" across the
24+
API. E.g., `Model.setParameters()` is now `Model.set_free_parameters()`.
1125
* `ReturnDataView.posteq_numsteps` and `ReturnDataView.posteq_numsteps` now
1226
return a one-dimensional array of shape `(num_timepoints,)` instead of a
1327
two-dimensional array of shape `(1, num_timepoints)`.

doc/examples/example_errors.ipynb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -626,8 +626,10 @@
626626
"\n",
627627
"unscaled_parameter = dict(\n",
628628
" zip(\n",
629-
" amici_model.get_parameter_ids(),\n",
630-
" starmap(amici.unscale_parameter, zip(edata.parameters, edata.pscale)),\n",
629+
" amici_model.get_free_parameter_ids(),\n",
630+
" starmap(\n",
631+
" amici.unscale_parameter, zip(edata.free_parameters, edata.pscale)\n",
632+
" ),\n",
631633
" )\n",
632634
")\n",
633635
"print(dict((p, unscaled_parameter[p]) for p in (\"Kd\", \"Kp\", \"n_par\")))"

doc/examples/example_large_models/example_performance_optimization.ipynb

Lines changed: 12 additions & 32 deletions
Large diffs are not rendered by default.

doc/examples/example_presimulation/ExampleExperimentalConditions.ipynb

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -219,9 +219,7 @@
219219
{
220220
"cell_type": "markdown",
221221
"metadata": {},
222-
"source": [
223-
"Now the model is ready for compilation using [sbml2amici](https://amici.readthedocs.io/en/latest/generated/amici.sbml_import.SbmlImporter.html#amici.sbml_import.SbmlImporter.sbml2amici). Note that we here pass `fixedParameters` as arguments to `constant_parameters`, which ensures that amici is aware that we want to have them as `fixedParameters`:"
224-
]
222+
"source": "Now the model is ready for compilation using [sbml2amici](https://amici.readthedocs.io/en/latest/generated/amici.sbml_import.SbmlImporter.html#amici.sbml_import.SbmlImporter.sbml2amici). Note that we here pass `fixed_parameters`, which ensures faster compilation by disabling sensitivity calculations for these parameters:"
225223
},
226224
{
227225
"cell_type": "code",
@@ -234,7 +232,7 @@
234232
" model_output_dir,\n",
235233
" verbose=False,\n",
236234
" observation_model=observables,\n",
237-
" constant_parameters=fixed_parameters,\n",
235+
" fixed_parameters=fixed_parameters,\n",
238236
")\n",
239237
"# load the generated module\n",
240238
"model_module = amici.import_model_module(model_name, model_output_dir)"

doc/examples/example_splines/ExampleSplines.ipynb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@
9090
" # Setup simulation timepoints and parameters\n",
9191
" model = model_module.get_model()\n",
9292
" for name, value in parameters.items():\n",
93-
" model.set_parameter_by_name(name, value)\n",
93+
" model.set_free_parameter_by_name(name, value)\n",
9494
" if isinstance(T, int | float):\n",
9595
" T = np.linspace(0, T, 100)\n",
9696
" model.set_timepoints([float(t) for t in T])\n",
@@ -589,9 +589,9 @@
589589
"source": [
590590
"# Sensitivities with respect to the spline values can be computed\n",
591591
"fig, ax = plt.subplots()\n",
592-
"ax.plot(rdata[\"t\"], rdata.sx[:, 0], label=model.get_parameter_names()[0])\n",
593-
"ax.plot(rdata[\"t\"], rdata.sx[:, 1], label=model.get_parameter_names()[1])\n",
594-
"ax.plot(rdata[\"t\"], rdata.sx[:, 2], label=model.get_parameter_names()[2])\n",
592+
"ax.plot(rdata[\"t\"], rdata.sx[:, 0], label=model.get_free_parameter_names()[0])\n",
593+
"ax.plot(rdata[\"t\"], rdata.sx[:, 1], label=model.get_free_parameter_names()[1])\n",
594+
"ax.plot(rdata[\"t\"], rdata.sx[:, 2], label=model.get_free_parameter_names()[2])\n",
595595
"ax.set_xlabel(\"time\")\n",
596596
"ax.set_ylabel(\"sensitivity\")\n",
597597
"ax.legend();"

doc/examples/example_steady_states/ExampleEquilibrationLogic.ipynb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,10 @@
7979
]
8080
},
8181
{
82-
"cell_type": "code",
83-
"execution_count": null,
8482
"metadata": {},
83+
"cell_type": "code",
8584
"outputs": [],
85+
"execution_count": null,
8686
"source": [
8787
"# Import necessary libraries and define the model\n",
8888
"import os\n",
@@ -165,16 +165,16 @@
165165
]
166166
},
167167
{
168-
"cell_type": "code",
169-
"execution_count": null,
170168
"metadata": {},
169+
"cell_type": "code",
171170
"outputs": [],
171+
"execution_count": null,
172172
"source": [
173173
"# Import the model\n",
174174
"sbml_importer = amici.SbmlImporter(antimony2sbml(ant_model), from_file=False)\n",
175175
"\n",
176176
"# specify observables and constant parameters\n",
177-
"constant_parameters = [\"synthesis_substrate\", \"init_enzyme\"]\n",
177+
"fixed_parameters = [\"synthesis_substrate\", \"init_enzyme\"]\n",
178178
"observation_model = [\n",
179179
" MC(id_=\"observable_product\", name=\"\", formula=\"product\"),\n",
180180
" MC(id_=\"observable_substrate\", name=\"\", formula=\"substrate\"),\n",
@@ -188,7 +188,7 @@
188188
" model_name,\n",
189189
" model_output_dir,\n",
190190
" observation_model=observation_model,\n",
191-
" constant_parameters=constant_parameters,\n",
191+
" fixed_parameters=fixed_parameters,\n",
192192
" compute_conservation_laws=False,\n",
193193
")\n",
194194
"\n",
@@ -198,7 +198,7 @@
198198
" model_reduced_name,\n",
199199
" model_reduced_output_dir,\n",
200200
" observation_model=observation_model,\n",
201-
" constant_parameters=constant_parameters,\n",
201+
" fixed_parameters=fixed_parameters,\n",
202202
")"
203203
]
204204
},

doc/examples/getting_started/GettingStarted.ipynb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,12 @@
7373
{
7474
"cell_type": "markdown",
7575
"metadata": {},
76-
"source": "The model allows the user to manipulate model related properties of simulations. This includes the values of model parameters that can be set by using [amici.Model.set_parameter_by_name](https://amici.readthedocs.io/en/latest/generated/amici.amici.Model.html#amici.amici.Model.set_parameter_by_name). Here, we set the model parameter `p1` to a value of `1e-3`."
76+
"source": "The model allows the user to manipulate model related properties of simulations. This includes the values of model parameters that can be set by using [amici.Model.set_free_parameter_by_name](https://amici.readthedocs.io/en/latest/generated/amici.amici.Model.html#amici.amici.Model.set_free_parameter_by_name). Here, we set the model parameter `p1` to a value of `1e-3`."
7777
},
7878
{
7979
"cell_type": "code",
8080
"metadata": {},
81-
"source": "model.set_parameter_by_name(\"p1\", 1e-3)",
81+
"source": "model.set_free_parameter_by_name(\"p1\", 1e-3)",
8282
"outputs": [],
8383
"execution_count": null
8484
},

doc/examples/getting_started_extended/GettingStartedExtended.ipynb

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -134,19 +134,17 @@
134134
"cell_type": "markdown",
135135
"metadata": {},
136136
"source": [
137-
"### Constant parameters\n",
137+
"### Fixed parameters\n",
138138
"\n",
139-
"Constant parameters, i.e. parameters with respect to which no sensitivities are to be computed (these are often parameters specifying a certain experimental condition) are provided as a list of parameter names."
139+
"Fixed parameters, i.e. parameters with respect to which no sensitivities are to be computed (these are often parameters specifying a certain experimental condition) are provided as a list of parameter names."
140140
]
141141
},
142142
{
143143
"cell_type": "code",
144144
"execution_count": 4,
145145
"metadata": {},
146146
"outputs": [],
147-
"source": [
148-
"constant_parameters = [\"k0\"]"
149-
]
147+
"source": "fixed_parameters = [\"k0\"]"
150148
},
151149
{
152150
"cell_type": "markdown",
@@ -335,7 +333,7 @@
335333
" model_output_dir,\n",
336334
" verbose=logging.INFO,\n",
337335
" observation_model=observation_model,\n",
338-
" constant_parameters=constant_parameters,\n",
336+
" fixed_parameters=fixed_parameters,\n",
339337
")"
340338
]
341339
},
@@ -373,7 +371,7 @@
373371
"model = model_module.get_model()\n",
374372
"\n",
375373
"print(\"Model name: \", model.get_name())\n",
376-
"print(\"Model parameters: \", model.get_parameter_ids())\n",
374+
"print(\"Model parameters: \", model.get_free_parameter_ids())\n",
377375
"print(\"Model outputs: \", model.get_observable_ids())\n",
378376
"print(\"Model state variables: \", model.get_state_ids())"
379377
]
@@ -417,7 +415,7 @@
417415
"print(\n",
418416
" \"Simulation was run using model default parameters as specified in the SBML model:\"\n",
419417
")\n",
420-
"print(dict(zip(model.get_parameter_ids(), model.get_parameters())))"
418+
"print(dict(zip(model.get_free_parameter_ids(), model.get_free_parameters())))"
421419
]
422420
},
423421
{
@@ -1113,11 +1111,11 @@
11131111
"source": [
11141112
"# Set model options\n",
11151113
"model = model_module.get_model()\n",
1116-
"p_orig = np.array(model.get_parameters())\n",
1114+
"p_orig = np.array(model.get_free_parameters())\n",
11171115
"p_orig[\n",
1118-
" list(model.get_parameter_ids()).index(\"observable_x1withsigma_sigma\")\n",
1116+
" list(model.get_free_parameter_ids()).index(\"observable_x1withsigma_sigma\")\n",
11191117
"] = 0.1 # Change default parameter\n",
1120-
"model.set_parameters(p_orig)\n",
1118+
"model.set_free_parameters(p_orig)\n",
11211119
"model.set_parameter_scale(amici.ParameterScaling.none)\n",
11221120
"model.set_timepoints(np.linspace(0, 10, 21))\n",
11231121
"\n",
@@ -1174,12 +1172,12 @@
11741172
" p[plist] = x0\n",
11751173
" verbose and print(f\"f: p={p}\")\n",
11761174
"\n",
1177-
" old_parameters = model.get_parameters()\n",
1175+
" old_parameters = model.get_free_parameters()\n",
11781176
" solver.set_sensitivity_order(amici.SensitivityOrder.none)\n",
1179-
" model.set_parameters(p)\n",
1177+
" model.set_free_parameters(p)\n",
11801178
" rdata = amici.run_simulation(model, solver, edata)\n",
11811179
"\n",
1182-
" model.set_parameters(old_parameters)\n",
1180+
" model.set_free_parameters(old_parameters)\n",
11831181
"\n",
11841182
" res = np.sum(rdata[symbol])\n",
11851183
" verbose and print(res)\n",
@@ -1196,13 +1194,13 @@
11961194
" model.require_sensitivities_for_all_parameters()\n",
11971195
" verbose and print(f\"g: p={p}\")\n",
11981196
"\n",
1199-
" old_parameters = model.get_parameters()\n",
1197+
" old_parameters = model.get_free_parameters()\n",
12001198
" solver.set_sensitivity_method(amici.SensitivityMethod.forward)\n",
12011199
" solver.set_sensitivity_order(amici.SensitivityOrder.first)\n",
1202-
" model.set_parameters(p)\n",
1200+
" model.set_free_parameters(p)\n",
12031201
" rdata = amici.run_simulation(model, solver, edata)\n",
12041202
"\n",
1205-
" model.set_parameters(old_parameters)\n",
1203+
" model.set_free_parameters(old_parameters)\n",
12061204
"\n",
12071205
" res = rdata[f\"s{symbol}\"]\n",
12081206
" if not isinstance(res, float):\n",
@@ -1257,7 +1255,7 @@
12571255
"outputs": [],
12581256
"source": [
12591257
"eps = 1e-4\n",
1260-
"op = model.get_parameters()\n",
1258+
"op = model.get_free_parameters()\n",
12611259
"\n",
12621260
"\n",
12631261
"solver.set_sensitivity_method(\n",
@@ -1273,23 +1271,23 @@
12731271
"\n",
12741272
"def fd(x0, ip, eps, symbol=\"llh\"):\n",
12751273
" p = list(x0[:])\n",
1276-
" old_parameters = model.get_parameters()\n",
1274+
" old_parameters = model.get_free_parameters()\n",
12771275
" solver.set_sensitivity_order(amici.SensitivityOrder.none)\n",
12781276
" p[ip] += eps\n",
1279-
" model.set_parameters(p)\n",
1277+
" model.set_free_parameters(p)\n",
12801278
" rdata_f = amici.run_simulation(model, solver, edata)\n",
12811279
" p[ip] -= 2 * eps\n",
1282-
" model.set_parameters(p)\n",
1280+
" model.set_free_parameters(p)\n",
12831281
" rdata_b = amici.run_simulation(model, solver, edata)\n",
12841282
"\n",
1285-
" model.set_parameters(old_parameters)\n",
1283+
" model.set_free_parameters(old_parameters)\n",
12861284
" return (rdata_f[symbol] - rdata_b[symbol]) / (2 * eps)\n",
12871285
"\n",
12881286
"\n",
12891287
"def plot_sensitivities(symbol, eps):\n",
12901288
" fig, axes = plt.subplots(4, 2, figsize=(15, 10))\n",
12911289
" for ip in range(4):\n",
1292-
" fd_approx = fd(model.get_parameters(), ip, eps, symbol=symbol)\n",
1290+
" fd_approx = fd(model.get_free_parameters(), ip, eps, symbol=symbol)\n",
12931291
"\n",
12941292
" axes[ip, 0].plot(\n",
12951293
" edata.get_timepoints(), rdata[f\"s{symbol}\"][:, ip, :], \"r-\"\n",

doc/glossary.rst

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,20 @@ Glossary
2727

2828
fixed parameters
2929
In AMICI, *fixed parameters* are parameters with respect to which no
30-
sensitivities are computed. They usually correspond to experimental
31-
conditions. For fixed parameters, different values can be set for
30+
sensitivities are computed. The values of fixed parameters can changed.
31+
"fixed" here refers to the fact that these parameters are fixed
32+
in context of parameter estimation.
33+
Fixed parameters encode, for example, experimental conditions.
34+
For fixed parameters, different values can be set for
3235
:term:`pre-equilibration`, :term:`pre-simulation` and the main
3336
simulation. See also :term:`simulation periods`.
37+
See also :term:`free parameters`.
38+
39+
free parameters
40+
In AMICI, *free parameters* are parameters with respect to which
41+
sensitivities are computed. These are typically the parameters that
42+
are estimated in a parameter estimation problem.
43+
See also :term:`fixed parameters`.
3444

3545
IDAS
3646
`IDAS <https://computing.llnl.gov/projects/sundials/idas>`_ is a

include/amici/edata.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ class ExpData : public SimulationParameters {
5858
* @param nztrue Number of event outputs
5959
* @param nmaxevent Maximal number of events to track
6060
* @param ts Timepoints (dimension: nt)
61-
* @param fixed_parameters Model constants (dimension: nk)
61+
* @param fixed_parameters Model variables excluded from sensitivity
62+
* analysis (dimension: nk)
6263
*/
6364
ExpData(
6465
int nytrue, int nztrue, int nmaxevent, std::vector<realtype> ts,

0 commit comments

Comments
 (0)