Skip to content

Commit f99f50b

Browse files
Release v0.5.9
Release v0.5.9; Merge pull request ICB-DCM#1688 from ICB-DCM/develop
2 parents 8ab2b23 + 3d0d233 commit f99f50b

File tree

112 files changed

+1062
-715
lines changed

Some content is hidden

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

112 files changed

+1062
-715
lines changed

.pre-commit-config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
repos:
1313
- repo: https://github.com/pre-commit/pre-commit-hooks
14-
rev: v5.0.0
14+
rev: v6.0.0
1515
hooks:
1616
- id: check-yaml
1717
description: Check yaml files for parseable syntax
@@ -33,7 +33,7 @@ repos:
3333
description: Trim trailing whitespaces
3434
- repo: https://github.com/astral-sh/ruff-pre-commit
3535
# Ruff version.
36-
rev: v0.9.10
36+
rev: v0.15.0
3737
hooks:
3838
# Run the linter.
3939
- id: ruff

CHANGELOG.rst

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,22 @@ Release notes
66
..........
77

88

9+
0.5.9 (2026-02-26)
10+
------------------
11+
12+
- Optimization
13+
- Support walltime limit in ScipyOptimizer (#1671)
14+
- Adding wall time limit option for CMAOptimizer (#1670)
15+
- Fix ipopt wall time limit (#1674)
16+
- Scatter search: refuse Problem with x_guesses (#1677)
17+
- Profiling
18+
- Lexiographic order in parameter profiles (#1683)
19+
- Select
20+
- Set optimal point to fixed vals if no parameters are estimated (#1685)
21+
- Visualize
22+
- Plot scatter points in reverse order to ensure that the best points are plotted on top (#1680)
23+
24+
925
0.5.8 (2025-12-18)
1026
------------------
1127

doc/example/amici.ipynb

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,10 @@
210210
"# Retrieve model output names and formulae from AssignmentRules and remove the respective rules\n",
211211
"observables = amici.assignmentRules2observables(\n",
212212
" sbml_importer.sbml, # the libsbml model object\n",
213-
" filter_function=lambda variable: variable.getId().startswith(\"observable_\")\n",
214-
" and not variable.getId().endswith(\"_sigma\"),\n",
213+
" filter_function=lambda variable: (\n",
214+
" variable.getId().startswith(\"observable_\")\n",
215+
" and not variable.getId().endswith(\"_sigma\")\n",
216+
" ),\n",
215217
")\n",
216218
"print(\"Observables:\")\n",
217219
"pprint(observables)"
@@ -235,22 +237,14 @@
235237
]
236238
},
237239
{
240+
"metadata": {},
238241
"cell_type": "code",
239-
"execution_count": null,
240-
"metadata": {
241-
"collapsed": false,
242-
"jupyter": {
243-
"outputs_hidden": false
244-
},
245-
"pycharm": {
246-
"name": "#%%\n"
247-
}
248-
},
249242
"outputs": [],
243+
"execution_count": null,
250244
"source": [
251245
"sigma_vals = [\"sd_pSTAT5A_rel\", \"sd_pSTAT5B_rel\", \"sd_rSTAT5A_rel\"]\n",
252246
"observable_names = observables.keys()\n",
253-
"sigmas = dict(zip(list(observable_names), sigma_vals))\n",
247+
"sigmas = dict(zip(list(observable_names), sigma_vals, strict=True))\n",
254248
"pprint(sigmas)"
255249
]
256250
},

doc/example/getting_started.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,7 @@
476476
"print(\"-------------------\")\n",
477477
"\n",
478478
"for optimizer_name, optimizer_result in zip(\n",
479-
" optimizer_names, optimizer_results\n",
479+
" optimizer_names, optimizer_results, strict=True\n",
480480
"):\n",
481481
" t = np.sum(optimizer_result.optimize_result.get_for_key(\"time\")) / n_starts\n",
482482
" print(f\"{optimizer_name}: {t:f} s\")"

doc/example/julia.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@
392392
"\n",
393393
"import matplotlib.pyplot as plt\n",
394394
"\n",
395-
"for i, label in zip(range(3), [\"S\", \"I\", \"R\"]):\n",
395+
"for i, label in zip(range(3), [\"S\", \"I\", \"R\"], strict=True):\n",
396396
" plt.plot(sol_true[i], color=f\"C{i}\", label=label)\n",
397397
" plt.plot(data[i], \"x\", color=f\"C{i}\")\n",
398398
"plt.legend();"

doc/example/model_evidence_and_bayes_factors.ipynb

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@
7979
"outputs": [],
8080
"source": [
8181
"from functools import partial\n",
82-
"from typing import Union\n",
8382
"\n",
8483
"import matplotlib.pyplot as plt\n",
8584
"import numpy as np\n",
@@ -219,7 +218,7 @@
219218
"outputs": [],
220219
"source": [
221220
"# define likelihood for each model, and build the objective functions for the pyPESTO problem\n",
222-
"def neg_log_likelihood(params: Union[np.ndarray, list], data: np.ndarray):\n",
221+
"def neg_log_likelihood(params: np.ndarray | list, data: np.ndarray):\n",
223222
" # normal distribution\n",
224223
" mu, std = params\n",
225224
" n = int(data.size)\n",
@@ -230,15 +229,15 @@
230229
" )\n",
231230
"\n",
232231
"\n",
233-
"def neg_log_likelihood_grad(params: Union[np.ndarray, list], data: np.ndarray):\n",
232+
"def neg_log_likelihood_grad(params: np.ndarray | list, data: np.ndarray):\n",
234233
" mu, std = params\n",
235234
" n = int(data.size)\n",
236235
" grad_mu = -np.sum(data - mu) / (std**2)\n",
237236
" grad_std = n / std - np.sum((data - mu) ** 2) / (std**3)\n",
238237
" return np.array([grad_mu, grad_std])\n",
239238
"\n",
240239
"\n",
241-
"def neg_log_likelihood_hess(params: Union[np.ndarray, list], data: np.ndarray):\n",
240+
"def neg_log_likelihood_hess(params: np.ndarray | list, data: np.ndarray):\n",
242241
" mu, std = params\n",
243242
" n = int(data.size)\n",
244243
" hess_mu_mu = n / (std**2)\n",
@@ -248,7 +247,7 @@
248247
"\n",
249248
"\n",
250249
"def neg_log_likelihood_m2(\n",
251-
" params: Union[np.ndarray, list], data: np.ndarray, n_mix: int\n",
250+
" params: np.ndarray | list, data: np.ndarray, n_mix: int\n",
252251
"):\n",
253252
" # normal distribution\n",
254253
" y1 = data[:n_mix]\n",

doc/example/petab_import.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@
288288
"\n",
289289
"\n",
290290
"fdval = fd(petab_problem.x_nominal_free_scaled)\n",
291-
"for i, (g, f) in enumerate(zip(gradient, fdval)):\n",
291+
"for i, (g, f) in enumerate(zip(gradient, fdval, strict=True)):\n",
292292
" print(f\"{i=}: {g=:9f},\\t{f=:9f},\\t{g - f=:9f}\")\n",
293293
"print(f\"l2 difference: {np.linalg.norm(gradient - fdval):.2e}\")"
294294
]

doc/example/synthetic_data.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
" else x_value\n",
5959
" )\n",
6060
" for x_id, x_value in zip(\n",
61-
" pypesto_problem.x_names, optimize_result[0][\"x\"]\n",
61+
" pypesto_problem.x_names, optimize_result[0][\"x\"], strict=True\n",
6262
" )\n",
6363
" # if x_id in scaling\n",
6464
" }"

doc/using_pypesto.bib

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,4 +514,58 @@ @Article{PerssonFro2025
514514
modificationdate = {2025-10-13T14:07:29},
515515
}
516516

517+
@Article{CallenbachDor2025,
518+
author = {Callenbach, Aaron and Dore{\v s}i{\'c}, Domagoj and D{\"u}ster, Robert and Nakonecnij, Vanessa and Dudkin, Erika and Geyer, Matthias and Hasenauer, Jan},
519+
journal = {bioRxiv},
520+
title = {Quantitative modeling of {P-TEFb} mediated {CTD} phosphorylation identifies local cooperativity},
521+
year = {2025},
522+
abstract = {Fine-tuned regulation of RNA polymerase II (Pol II) activity is essential for accurate gene expression. A key layer of this regulation involves phosphorylation of Pol II{\textquoteright}s C-terminal domain (CTD), a repetitive heptapeptide tail that coordinates transcription and RNA-processing factors. The kinase P-TEFb plays a major role in this process, yet its precise phosphorylation mechanism remains unclear. Previous in vitro studies have suggested a distributive mode of action based largely on qualitative inspection of mass spectrometry data rather than quantitative analysis. Here, we use mathematical modeling of CTD phosphorylation to explore whether local context, such as neighboring phosphorylations or directional biases, affects PTEFb activity on the CTD. Our results indicate that P-TEFb acts distributively but with pronounced local cooperativity: repeats adjacent to phosphorylated sites are modified at higher rates. We find no evidence for directional bias, although the limited positional resolution of the data precludes a definitive conclusion. These results identify local context as an important factor in P-TEFb-mediated CTD phosphorylation and establish a quantitative modeling framework for dissecting multi-site modification dynamics.Competing Interest StatementThe authors have declared no competing interest.Deutsche Forschungsgemeinschaft, https://ror.org/018mejw64, EXC 2047-390685813, EXC 2151-390873048European Research Council, GA number 101126146, Advanced Grant NalpACTUniversity of Bonn, https://ror.org/041nas322, Schlegel Professorship of Jan Hasenauer},
523+
creationdate = {2025-12-10T21:24:21},
524+
doi = {10.64898/2025.11.29.690978},
525+
elocation-id = {2025.11.29.690978},
526+
eprint = {https://www.biorxiv.org/content/early/2025/12/02/2025.11.29.690978.full.pdf},
527+
modificationdate = {2025-12-10T21:24:39},
528+
publisher = {Cold Spring Harbor Laboratory},
529+
url = {https://www.biorxiv.org/content/early/2025/12/02/2025.11.29.690978},
530+
}
531+
532+
@Misc{VanhoeferKoe2025,
533+
author = {Jakob Vanhoefer and Antonia Körner and Domagoj Doresic and Jan Hasenauer and Dilan Pathirana},
534+
title = {Scalable branch-and-bound model selection with non-monotonic criteria including AIC, BIC and Mallows's $\mathit{C_p}$},
535+
year = {2025},
536+
archiveprefix = {arXiv},
537+
creationdate = {2025-12-18T19:53:30},
538+
eprint = {2512.12221},
539+
modificationdate = {2025-12-18T19:53:30},
540+
primaryclass = {q-bio.QM},
541+
url = {https://arxiv.org/abs/2512.12221},
542+
}
543+
544+
@Misc{ArrudaBra2025,
545+
author = {Jonas Arruda and Niels Bracher and Ullrich Köthe and Jan Hasenauer and Stefan T. Radev},
546+
title = {Diffusion Models in Simulation-Based Inference: A Tutorial Review},
547+
year = {2025},
548+
archiveprefix = {arXiv},
549+
creationdate = {2026-01-02T08:59:39},
550+
eprint = {2512.20685},
551+
modificationdate = {2026-01-02T08:59:39},
552+
primaryclass = {stat.ML},
553+
url = {https://arxiv.org/abs/2512.20685},
554+
}
555+
556+
@Article{LakrisenkoIse2026,
557+
author = {Lakrisenko, Polina and Isensee, J{\"o}rg and Hucho, Tim and Weindl, Daniel and Hasenauer, Jan},
558+
journal = {bioRxiv},
559+
title = {A mechanistic model of protein kinase {A} dynamics under pro- and anti-nociceptive inputs},
560+
year = {2026},
561+
abstract = {Protein kinase A (PKA) is a central integrator of nociceptive signaling, yet a quantitative account of how pro- and anti-nociceptive inputs shape its dynamics remains incomplete. Here, we develop a mechanistic model of PKA activity in nociceptive neurons that explicitly links receptor activation to downstream kinase regulation. Using time-course and dose-response measurements, we infer unknown process parameters and quantify parameter and prediction uncertainties to ensure robust conclusions. The model captures the activation of PKA by serotonin and forskolin and its suppression by opioids. We show how the model can be used for the assessment of alternative circuit topologies, and demonstrate that receptor context and stimulation history reconfigure PKA responsiveness, providing testable predictions for opioid modulation under clinically relevant dosing. This framework offers a principled basis for integrating PKA with broader pain-signaling networks, supports rational exploration of combination therapies, and establishes a general strategy for disentangling neuromodulatory control of kinase activity.Author summary Pain perception is modulated by a complex network of signaling pathways activated by different receptors with opposing effects. A key player in this process is protein kinase A (PKA), whose regulation by both serotonin and opioid receptors is not yet fully understood. In this study, we developed a mathematical model to investigate how these opposing signals affect PKA activity in sensory neurons. After estimating the unknown model parameters from a comprehensive dataset, we were able to quantitatively analyze the dynamic behavior of the system and use it for comparison of alternative circuit topologies. Our model provides a valuable tool for integrating diverse molecular interactions involved in pain processing and could help guide future efforts to develop better treatments for chronic pain and reduce opioid tolerance.Competing Interest StatementThe authors have declared no competing interest.},
562+
creationdate = {2026-02-23T10:58:07},
563+
doi = {10.64898/2026.02.12.705506},
564+
elocation-id = {2026.02.12.705506},
565+
eprint = {https://www.biorxiv.org/content/early/2026/02/14/2026.02.12.705506.full.pdf},
566+
modificationdate = {2026-02-23T10:58:07},
567+
publisher = {Cold Spring Harbor Laboratory},
568+
url = {https://www.biorxiv.org/content/early/2026/02/14/2026.02.12.705506},
569+
}
570+
517571
@Comment{jabref-meta: databaseType:bibtex;}

pypesto/C.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
Package-wide consistent constant definitions.
55
"""
66

7-
from enum import Enum
7+
from enum import Enum, StrEnum
88
from typing import Literal
99

1010
###############################################################################
@@ -97,7 +97,7 @@ class EnsembleType(Enum):
9797
RELATIVE = "relative"
9898

9999

100-
class InnerParameterType(str, Enum):
100+
class InnerParameterType(StrEnum):
101101
"""Specifies different inner parameter types."""
102102

103103
OFFSET = "offset"

0 commit comments

Comments
 (0)