Skip to content

PEtab import: steady-state (time=inf) measurements are materialized as a TimeCourse and crash at config load (OverflowError) #521

Description

@wshlavacek

Summary

A PEtab problem whose measurements are at time = inf (steady-state) imports fine, but config load then crashes because the importer materializes the measurement as a TimeCourse rather than a steady-state scan. PyBNF already has steady-state support (a ParamScan with steady_state=>1, ADR-0046); the gap is only that import_job does not select it for time = inf measurements.

Reproduce

Blasi_CellSystems2016 from the Benchmark-Models-PEtab collection (subset I of the Grein et al. 2026 optimizer benchmark). Every Blasi measurement is at time = inf.

from pybnf.petab import petab1to2_preserve_scale, import_job
import tempfile
v2 = petab1to2_preserve_scale("Blasi_CellSystems2016/Blasi_CellSystems2016.yaml", tempfile.mkdtemp())
import_job(v2, "out", job_type="gntr")   # OK — writes an .exp whose time column is `inf`

Then load the emitted conf (or run pybnf -c imported.conf -o):

File ".../pybnf/config.py", line 1422, in _load_experiments
    action = TimeCourse({'suffix': name, 'method': method}, explicit_points=points)
File ".../pybnf/pset.py", line 1792, in __init__
    self.stepnumber = int(np.round((self.time - self.t_start) / self.step))
OverflowError: cannot convert float infinity to integer

Root cause

PEtab time = inf denotes a steady-state measurement. import_job writes the literal inf into the .exp time column and emits a time-course experiment (experiment: ..., method: ode). TimeCourse.__init__ then derives a step count from the (assumed finite) time grid, which overflows on inf.

Expected

Recognize time = inf measurements at import and emit a steady-state action instead — a ParamScan with steady_state=>1, ss_method=>"newton" (ADR-0046) — so the datum is compared at the KINSOL steady state rather than at a fixed endpoint. PyBNF already supports this scan; only the importer's action selection needs to branch on time = inf.

Impact

Blocks Blasi_CellSystems2016 (all measurements at t = inf) — the last open subset-I problem in the Grein et al. 2026 benchmark import. Distinct from #509 (natural-log lnnormal noise), which this problem also uses: #509 is fixed and now lets Blasi import; this steady-state gap is what stops it at config load.

PyBNF version: 1.6.0 (main).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions