Skip to content

SysSimX v0.4.0 — paper baseline

Choose a tag to compare

@FlorianFrech FlorianFrech released this 12 Sep 11:31
· 42 commits to main since this release

Frozen baseline for the SysSimX framework paper. Every evidence artifact quoted
in the manuscript is produced at this tag.

A minor release rather than a patch: public API is removed, three previously
silent behaviours now raise, and two recording defects changed what a run
records.

Upgrading from 0.3.x — read this first

  • Recorded sample counts drop by one per port. t0 was recorded twice: a
    provisional sample before a generation's inputs had propagated, then the
    settled values. The provisional one is now dropped. Existing traces carry a
    doubled initial point and a zero-length first interval, so re-run any
    notebook whose results you still rely on.
  • System.initialize() raises on a second call. It was not idempotent, and
    re-running an initialization cell silently corrupted the recorded time axis.
    Call reset() to start a fresh run.
  • The base install is smaller. pip install syssimx now pulls only NumPy,
    Pint, and NetworkX. SciPy and pydot are gone; result tables, YAML config, and
    visualization moved to extras. Install what you use:
    pip install "syssimx[fmu,fem,opensim,results,config,viz,examples]"
  • StateAdapter, state_adapters, and the sync_events log are removed.
    Committed handovers are now typed records reachable through
    MultiComponent.switch_events, SystemHistory, and
    SimulationResult.mode_switches.
  • Systems with event sources always use HybridAlgorithm. An untouched
    default is promoted automatically and an explicitly configured hybrid instance
    is preserved, but an explicit non-hybrid choice now raises instead of being
    silently replaced.
  • Unknown HybridAlgorithm constructor options now fail instead of becoming
    inert instance attributes.

Added

  • MultiComponent, SwitchRegions, and the typed ModeSwitchEvent exported
    from the primary syssimx API.
  • Validated constructor options for HybridAlgorithm. The experimental
    declarative loader forwards algorithm options and rejects malformed ones.

Changed

  • SimulationResult preserves port units in tables and CSV exports, and rejects
    malformed, non-monotone, or misaligned histories rather than omitting data.
  • The minimum custom-component contract is clarified as three lifecycle hooks.
    PortSpec validates its name, enum type, direction, and description.
  • The published API reference is curated around supported interfaces. The
    declarative loader and CLI are explicitly labeled experimental.

Fixed

  • _record_outputs() no longer skips output ports individually. The guard was
    unreachable but implied that partial recording was acceptable.
  • ComponentHistory.to_arrays() verifies that exported ports share one time
    axis instead of returning the first port's timestamps for all of them. A port
    that had dropped a sample was previously exported against a longer axis,
    silently shifting its values against every other port while still producing a
    plottable result.

Reproducibility

This tag is the frozen revision for the framework paper. Results recorded
against earlier revisions of this branch do not describe it: the history was
rewritten before this release, so commit SHAs published prior to v0.4.0 are no
longer reachable. Pin v0.4.0, not a commit.

Full detail in CHANGELOG.md.