New formats have been added and validated. The importers for every format other than
Vensim have been tested against bigger real model files with their verified edgelists.
Validated here against public corpora: 123 XMILE/STMX files from the system dynamics community’s own test suite (SDXorg/test-models), real AnyLogic projects, 30 Stella causal loop diagrams, and Powersim and Stella models whose correct edge lists were known.
Powersim Studio .sip /
.sim now import WITH THEIR LINKS.
powersim\_links() returns 52 edges with correct names and
positions from a model whose verified edge list has 52; 47 of the 47
match it exactly. Three undocumented things had to be worked out:
"ZLNK"/"XLNK" are not chunk tags. The Z
and X are the last byte of the preceding big-endian LENGTH field; the
real form type is "LNK ".CON chunk holds the arrow’s POLYLINE, not
endpoint ids, so endpoints are resolved GEOMETRICALLY – the first and
last points fall inside the source and target variable boxes.Names needed one more step: the string table’s order does not follow
the diagram’s. The module’s NAME records carry each
variable’s string index as (index * 16), and those indices are not
contiguous.
Legacy Stella .STM /
.ITM binaries are detected and read fully.
Variable names and equations decode cleanly; the mapping between them
does not, so the result carries a warning saying some edges are likely
attributed to the wrong variable.
Vensim .vmfx – Vensim’s own XML
schema, NOT XMILE, so the XMILE reader found nothing in it.
parse\_vmfx() matches on local element names and accepts
the usual equation spellings.
AnyLogic .alpx – the same project,
zipped. parse\_alpx() unwraps the archive and parses the
.alp inside.
GoldSim native .sim is identified
and explained rather than failing with an XML parse error. Powersim and
GoldSim both use .sim, so the two are told apart by
CONTENT: Powersim writes an OLE2 compound document and GoldSim does
not.
<views> section as a <connector>.
Reading only equations extracted nothing from exactly the kind of file
this package exists to convert. Across 30 real Stella CLDs, all 30 now
convert.Polarity column of + and - just
like a Vensim import, with <alias> ghosts resolved to
their targets.<views> section repeats every variable with
no <eqn>; those empty placeholders were overwriting
the real equations. Since every real model has a diagram, this cost
nearly every file most of its links.name
attribute but writes identifiers with underscores.false\_input AND true\_input matched as one token and
resolved to nothing."Depression\\nTreatments" became
"Depression nTreatments", splitting one variable across
three nodes.Edge lists were compared against an independent Python implementation across all 30 Stella CLDs and the Powersim model: identical on every file, including a 570-node, 844-edge model and the 47-edge Powersim diagram.